home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / IEditor / windows.c < prev   
Encoding:
C/C++ Source or Header  |  1997-06-17  |  67.9 KB  |  3,239 lines

  1. /// Include
  2. #include <stdarg.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7.  
  8. #define INTUI_V36_NAMES_ONLY
  9. #define ASL_V38_NAMES_ONLY
  10. #define CATCOMP_NUMBERS
  11.  
  12. #include <exec/libraries.h>             // exec
  13. #include <exec/nodes.h>
  14. #include <exec/lists.h>
  15. #include <exec/memory.h>
  16. #include <exec/io.h>
  17. #include <intuition/intuition.h>        // intuition
  18. #include <intuition/screens.h>
  19. #include <graphics/text.h>              // graphics
  20. #include <graphics/view.h>
  21. #include <graphics/rastport.h>
  22. #include <libraries/gadtools.h>         // libraries
  23. #include <libraries/reqtools.h>
  24. #include <devices/printer.h>
  25. #include <clib/exec_protos.h>           // protos
  26. #include <clib/intuition_protos.h>
  27. #include <clib/graphics_protos.h>
  28. #include <clib/locale_protos.h>
  29. #include <clib/reqtools_protos.h>
  30. #include <pragmas/exec_pragmas.h>       // pragmas
  31. #include <pragmas/intuition_pragmas.h>
  32. #include <pragmas/graphics_pragmas.h>
  33. #include <pragmas/locale_pragmas.h>
  34. #include <pragmas/reqtools_pragmas.h>
  35. #include <pragmas/gadtools_pragmas.h>
  36.  
  37.  
  38. #include "DEV_IE:defs.h"
  39. #include "DEV_IE:GUI.h"
  40. #include "DEV_IE:GUI_locale.h"
  41. #include "DEV_IE:Include/expanders.h"
  42. #include "DEV_IE:Include/expander_pragmas.h"
  43. ///
  44. /// Prototipi
  45. BOOL    EditText( struct ITextNode * );
  46. BOOL    MoveText( struct ITextNode * );
  47. UBYTE   MoveRect( UWORD, UWORD, struct MyRect * );
  48. struct BevelBoxNode *GetBoxSel( void );
  49. void    BB_Update( void );
  50. void    BB_MoveUp( struct BevelBoxNode * );
  51. void    BB_MoveDown( struct BevelBoxNode * );
  52. void    BB_MoveLeft( struct BevelBoxNode * );
  53. void    BB_MoveRight( struct BevelBoxNode * );
  54. void    EndBoxMove( void );
  55. void    BB_SistemaXYGads( void );
  56. void    BB_SistemaRecessed( struct BevelBoxNode * );
  57. void    BB_SistemaType( struct BevelBoxNode * );
  58. void    BB_EDable( BOOL );
  59. BOOL    BB_CheckResize( void );
  60. void    MuoviBoxes( WORD, WORD );
  61. void    EditingBox( BOOL );
  62. ///
  63. /// Dati
  64. ULONG WorkWndTags[] = {
  65.     WA_Flags,      W_F,
  66.     WA_Top,         60,
  67.     WA_Left,        80,
  68.     WA_Width,      400,
  69.     WA_Height,      80,
  70.     WA_Title,        0,
  71.     WA_CustomScreen, 0,
  72.     WA_Gadgets,      0,
  73.     WA_MinWidth,    30,
  74.     WA_MaxWidth,    -1,
  75.     WA_MinHeight,   12,
  76.     WA_MaxHeight,   -1,
  77.     WA_MouseQueue,   1,
  78.     TAG_END
  79.     };
  80.  
  81.  
  82. BOOL    Locked;
  83. APTR    BackLock, ToolsLock;
  84.  
  85. UWORD   NewWinID;
  86. ///
  87.  
  88.  
  89.  
  90. /// Lock delle finestre
  91. void LockAllWindows( void )
  92. {
  93.     struct WindowInfo *wnd;
  94.  
  95.     if (!( Locked )) {
  96.  
  97.     Locked = TRUE;
  98.  
  99.     BackLock    = rtLockWindow( BackWnd  );
  100.  
  101.     if( ToolsWnd )
  102.         ToolsLock   = rtLockWindow( ToolsWnd );
  103.  
  104.     for( wnd = IE.win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  105.         if(( wnd->wi_flags1 & W_APERTA ) && ( wnd->wi_winptr )) {
  106.         wnd->wi_Lock = rtLockWindow( wnd->wi_winptr );
  107. //                ModifyIDCMP( wnd->wi_winptr, wnd->wi_winptr->IDCMPFlags & ~IDCMP_REFRESHWINDOW );
  108.         }
  109.     }
  110.     }
  111. }
  112.  
  113.  
  114. void UnlockAllWindows( void )
  115. {
  116.     struct WindowInfo *wnd;
  117.     APTR   b1, b2;
  118.  
  119.     if ( Locked ) {
  120.  
  121.     if( BackLock ) {
  122.         rtUnlockWindow( BackWnd, BackLock );
  123.         BackLock = NULL;
  124.     }
  125.  
  126.     if( ToolsLock ) {
  127.         rtUnlockWindow( ToolsWnd, ToolsLock );
  128.         ToolsLock = NULL;
  129.     }
  130.  
  131.     b1 = IE.win_info;
  132.     b2 = IE.win_active;
  133.  
  134.     for( wnd = IE.win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  135.         if(( wnd->wi_flags1 & W_APERTA ) && ( wnd->wi_Lock )) {
  136.  
  137.         rtUnlockWindow( wnd->wi_winptr, wnd->wi_Lock );
  138.         wnd->wi_Lock = NULL;
  139.  
  140.         SetPointer( wnd->wi_winptr, puntatore, 13, 16, -7, -6 );
  141.         IE.win_info = wnd;
  142.         IE.win_active = wnd->wi_winptr;
  143. //                RinfrescaFinestra();
  144. //                ModifyIDCMP( wnd->wi_winptr, wnd->wi_winptr->IDCMPFlags | IDCMP_REFRESHWINDOW );
  145.         }
  146.     }
  147.  
  148.     IE.win_info = b1;
  149.     IE.win_active = b2;
  150.  
  151.     Locked = FALSE;
  152.     }
  153. }
  154. ///
  155.  
  156. /// OpenWindowShdIDCMP e CloseWindowSafely
  157. struct Window *OpenWindowShdIDCMP( ULONG *tags, ULONG IDCMP )
  158. {
  159.     struct Window *wnd;
  160.  
  161.     if( wnd = OpenWindowTagList( NULL, (struct TagItem *)tags )) {
  162.     wnd->UserPort = IDCMP_Port;
  163.     ModifyIDCMP( wnd, IDCMP );
  164.     }
  165.  
  166.     return( wnd );
  167. }
  168.  
  169.  
  170. void CloseWindowSafely( struct Window *Wnd )
  171. {
  172.     struct IntuiMessage *Msg;
  173.     struct Node         *succ;
  174.  
  175.     ClearMenuStrip( Wnd );
  176.  
  177.     Forbid();
  178.  
  179.     Msg = (struct IntuiMessage *)Wnd->UserPort->mp_MsgList.lh_Head;
  180.     while( succ = Msg->ExecMessage.mn_Node.ln_Succ ) {
  181.     if( Msg->IDCMPWindow == Wnd ) {
  182.         Remove(( struct Node *)Msg );
  183.         ReplyMsg(( struct Message *)Msg );
  184.     }
  185.     Msg = (struct IntuiMessage *)succ;
  186.     }
  187.  
  188.     Wnd->UserPort = NULL;
  189.     ModifyIDCMP( Wnd, 0L );
  190.  
  191.     Permit();
  192.  
  193.     CloseWindow( Wnd );
  194. }
  195. ///
  196.  
  197. /// EliminaAllWorkWnd
  198. void EliminaAllWorkWnd( void )
  199. {
  200.     struct WindowInfo *wnd;
  201.  
  202.     while( wnd = RemTail(( struct List * )&IE.win_list )) {
  203.  
  204.     if( wnd->wi_flags1 & W_APERTA )
  205.         CloseWindowSafely( wnd->wi_winptr );
  206.  
  207.     FreeObject( wnd, IE_WINDOW );
  208.     }
  209.  
  210.     IE.win_info = IE.win_active = NULL;
  211. }
  212. ///
  213.  
  214. /// DisattivaNoOpen
  215. void DisattivaNoOpen( void )
  216. {
  217.     int cnt;
  218.  
  219.     for( cnt = 0; cnt < DISATTIVAMENU_0WND_NUM; cnt++ )
  220.     OffMenu( BackWnd, disattiva_noopen[ cnt ]);
  221.  
  222.     MenuGadgetDisattiva();
  223. }
  224. ///
  225.  
  226. /// PrintWindow
  227. BOOL StampaWndMenued( void )
  228. {
  229.     struct MsgPort     *port;
  230.     struct IODRPReq    *req;
  231.     BOOL                error = FALSE;
  232.  
  233.     Stat( CatCompArray[ MSG_PRINTING ].cca_Str, FALSE, MSG_PRINTING );
  234.  
  235.     if( port = CreateMsgPort() ) {
  236.     if( req = CreateIORequest( port, sizeof( struct IODRPReq ))) {
  237.         if(! OpenDevice( "printer.device", 0, (struct IORequest *)req, 0 )) {
  238.  
  239.         req->io_Modes     = GetVPModeID( &Scr->ViewPort );
  240.         req->io_ColorMap  = Scr->ViewPort.ColorMap;
  241.         req->io_RastPort  = IE.win_active->RPort;
  242.         req->io_SrcX      = req->io_SrcY = 0;
  243.         req->io_SrcWidth  = req->io_DestCols = IE.win_active->Width << 1;
  244.         req->io_SrcHeight = req->io_DestRows = IE.win_active->Height << 1;
  245.         req->io_Special   = SPECIAL_ASPECT;
  246.         req->io_Command   = PRD_DUMPRPORT;
  247.  
  248.         DoIO(( struct IORequest * )req );
  249.  
  250.         CloseDevice(( struct IORequest * )req );
  251.  
  252.         } else {
  253.         error = TRUE;
  254.         }
  255.  
  256.         DeleteIORequest( req );
  257.  
  258.     } else {
  259.         error = TRUE;
  260.     }
  261.  
  262.     DeleteMsgPort( port );
  263.  
  264.     } else {
  265.     error = TRUE;
  266.     }
  267.  
  268.     if( error )
  269.     Stat( CatCompArray[ ERR_PRINTERR ].cca_Str, TRUE, ERR_PRINTERR );
  270.     else
  271.     Stat( &ok_txt[1], FALSE, 0 );
  272.  
  273.     return( TRUE );
  274. }
  275. ///
  276.  
  277. /// EliminaWnd
  278. BOOL DelWndClicked( void )
  279. {
  280.     return( EliminaWndMenued() );
  281. }
  282.  
  283. BOOL EliminaWndMenued( void )
  284. {
  285.     struct WindowInfo  *wnd;
  286.     int                 cnt;
  287.  
  288.     if( IERequest( CatCompArray[ MSG_DELETE_OR_NOT ].cca_Str,
  289.            CatCompArray[ ANS_YES_NO ].cca_Str,
  290.            MSG_DELETE_OR_NOT, ANS_YES_NO )) {
  291.  
  292.     wnd = IE.win_info;
  293.  
  294.     ChiudiWndMenued();
  295.  
  296.     Remove(( struct Node * )wnd );
  297.  
  298.     FreeObject( wnd, IE_WINDOW );
  299.  
  300.     IE.num_win -= 1;
  301.  
  302.     if(!( IE.num_win )) {
  303.  
  304.         for( cnt = 0; cnt < ATTIVAMENU_NUOVAW_NUM; cnt++ )
  305.         OffMenu( BackWnd, attivamenu_nuovawin[ cnt ]);
  306.  
  307.         ToolsGadgetsOff();
  308.     }
  309.  
  310.     Stat( CatCompArray[ MSG_DELETED_WND ].cca_Str, FALSE, MSG_DELETED_WND );
  311.  
  312.     } else
  313.     Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  314.  
  315.  
  316.     return( TRUE );
  317. }
  318. ///
  319.  
  320. /// EliminaAllWnd
  321. BOOL EliminaAllWndMenued( void )
  322. {
  323.     int     cnt;
  324.  
  325.     if( IERequest( CatCompArray[ MSG_DELETE_OR_NOT ].cca_Str, CatCompArray[ ANS_YES_NO ].cca_Str, MSG_DELETE_OR_NOT, ANS_YES_NO )) {
  326.  
  327.     EliminaAllWorkWnd();
  328.  
  329.     for( cnt = 0; cnt < ATTIVAMENU_NUOVAW_NUM; cnt ++ )
  330.         OffMenu( BackWnd, attivamenu_nuovawin[ cnt ]);
  331.  
  332.     MenuGadgetDisattiva();
  333.     ToolsGadgetsOff();
  334.  
  335.     IE.num_win  = 0;
  336.     IE.win_open = 0;
  337.  
  338.     NewWinID = 0;
  339.  
  340.     IE.flags |= WNDCHIUSA;
  341.  
  342.     Stat( CatCompArray[ MSG_DELETED_ALLWNDS ].cca_Str, FALSE, MSG_DELETED_ALLWNDS );
  343.  
  344.     } else
  345.     Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  346.  
  347.     return( TRUE );
  348. }
  349. ///
  350.  
  351. /// ChiudiWnd
  352. BOOL ChiudiWndMenued( void )
  353. {
  354.     struct WindowInfo *wnd;
  355.  
  356.     CloseWindowSafely( IE.win_active );
  357.  
  358.     IE.win_info->wi_flags1 &= ~W_APERTA;
  359.     IE.win_info->wi_winptr = NULL;
  360.  
  361.     if ( IE.win_info->wi_GList ) {
  362.     FreeGadgets( IE.win_info->wi_GList );
  363.     IE.win_info->wi_GList = NULL;
  364.     }
  365.  
  366.     IE.win_open -= 1;
  367.  
  368.     if ( IE.win_open ) {
  369.  
  370.     wnd = IE.win_list.mlh_Head;
  371.     while(!( wnd->wi_flags1 & W_APERTA ))
  372.         wnd = wnd->wi_succ;
  373.  
  374.     WindowToFront( wnd->wi_winptr );
  375.     ActivateWindow( wnd->wi_winptr );
  376.     IE.win_info = wnd;
  377.     IE.win_active = wnd->wi_winptr;
  378.  
  379.     } else {
  380.  
  381.     IE.win_info = NULL;
  382.     IE.win_active = NULL;
  383.     DisattivaNoOpen();
  384.     ToolsGadgetsOff();
  385.  
  386.     }
  387.  
  388.     IE.flags |= WNDCHIUSA;
  389.  
  390.     Stat( CatCompArray[ MSG_CLOSE_WND ].cca_Str, FALSE, MSG_CLOSE_WND );
  391.  
  392.     return( TRUE );
  393. }
  394. ///
  395.  
  396. /// ChiudiAllWnd
  397. BOOL ChiudiAllWndMenued( void )
  398. {
  399.     struct WindowInfo *wnd;
  400.  
  401.     IE.win_open = 0;
  402.  
  403.     for( wnd = IE.win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  404.     if( wnd->wi_flags1 & W_APERTA ) {
  405.         CloseWindowSafely( wnd->wi_winptr );
  406.         wnd->wi_winptr = NULL;
  407.         wnd->wi_flags1 &= ~W_APERTA;
  408.     }
  409.     }
  410.  
  411.     DisattivaNoOpen();
  412.     ToolsGadgetsOff();
  413.  
  414.     IE.win_active = NULL;
  415.  
  416.     IE.flags |= WNDCHIUSA;
  417.  
  418.     return( TRUE );
  419. }
  420. ///
  421.  
  422. /// Nuova finestra
  423. BOOL AddWndClicked( void )
  424. {
  425.     return( NewWndMenued() );
  426. }
  427.  
  428. BOOL NewWndMenued( void )
  429. {
  430.     struct WindowInfo *wnd;
  431.     int                cnt;
  432.  
  433.     if( wnd = AllocObject( IE_WINDOW )) {
  434.  
  435.     AddTail(( struct List * )&IE.win_list, (struct Node *)wnd );
  436.  
  437.     wnd->wi_IDCMP    = IDCMP_GADGETUP | IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW;
  438.     wnd->wi_Flags    = WFLG_SIMPLE_REFRESH | WFLG_SIZEGADGET | WFLG_DEPTHGADGET | WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_NEWLOOKMENUS;
  439.     wnd->wi_Top      =  60;
  440.     wnd->wi_Left     =  wnd->wi_Height = 80;
  441.     wnd->wi_Width    = 400;
  442.     wnd->wi_MaxWidth = wnd->wi_MaxHeight = -1;
  443.     wnd->wi_Tags    |= 0x10;
  444.     wnd->wi_name     = wnd->wi_Titolo;
  445.  
  446.     WorkWndTags[ WORKGADGETS ] = NULL;
  447.     WorkWndTags[ WORKTOP     ] = 60;
  448.     WorkWndTags[ WORKLEFT    ] = 80;
  449.     WorkWndTags[ WORKWIDTH   ] = 400;
  450.     WorkWndTags[ WORKHEIGHT  ] = 80;
  451.     WorkWndTags[ WORKTITLE   ] = wnd->wi_Titolo;
  452.     WorkWndTags[ WORKFLAGS   ] = ( IE.mainprefs & WFLAGS ) ? wnd->wi_Flags : W_F;
  453.  
  454.     if( wnd->wi_winptr = OpenWindowShdIDCMP( WorkWndTags, WorkWIDCMP )) {
  455.  
  456.         IE.win_info   = wnd->wi_winptr->UserData = wnd;
  457.         IE.win_active = wnd->wi_winptr;
  458.  
  459.         wnd->wi_winptr->ExtData = (APTR)HandleEdit;
  460.  
  461.         wnd->wi_flags1 |= W_APERTA;
  462.  
  463.         SetMenuStrip( wnd->wi_winptr, BackMenus );
  464.         SetPointer( wnd->wi_winptr, puntatore, 13, 16, -7, -6 );
  465.  
  466.         if(!( IE.win_open )) {
  467.         for( cnt = 0; cnt < ATTIVAMENU_NUOVAW_NUM; cnt++ )
  468.             OnMenu( BackWnd, attivamenu_nuovawin[ cnt ]);
  469.         ToolsGadgetsOn();
  470.         }
  471.  
  472.         IE.win_open += 1;
  473.         IE.num_win  += 1;
  474.         IE.flags &= ~SALVATO;
  475.  
  476.         TitoloWndMenued();
  477.  
  478.         if(!( IE.win_info->wi_Label[0] )) {
  479.         sprintf( IE.win_info->wi_Label, "Wnd%03ld", NewWinID );
  480.         NewWinID += 1;
  481.         }
  482.  
  483.         Stat( CatCompArray[ MSG_OPEN_WND ].cca_Str, FALSE, MSG_OPEN_WND );
  484.  
  485.     } else {
  486.         Stat( CatCompArray[ ERR_NOWND ].cca_Str, TRUE, ERR_NOWND );
  487.         Remove((struct Node *)wnd);
  488.         FreeObject( wnd, IE_WINDOW );
  489.     }
  490.  
  491.     } else
  492.     Stat( CatCompArray[ ERR_NOMEMORY ].cca_Str, TRUE, ERR_NOMEMORY );
  493.  
  494.     return( TRUE );
  495. }
  496. ///
  497.  
  498. /// Apri finestra
  499. BOOL ApriWndMenued( void )
  500. {
  501.     struct WindowInfo  *wnd;
  502.     struct BooleanInfo *gad;
  503.     int                 cnt;
  504.  
  505.     if( wnd = GetWnd() ) {
  506.  
  507.     if( wnd->wi_flags1 & W_APERTA ) {
  508.  
  509.         WindowToFront( wnd->wi_winptr );
  510.         ActivateWindow( wnd->wi_winptr );
  511.         Stat( CatCompArray[ MSG_ALREADY_OPEN ].cca_Str, FALSE, MSG_ALREADY_OPEN );
  512.  
  513.     } else {
  514.  
  515.         IE.win_info = wnd;
  516.         RifaiGadgets();
  517.  
  518.         WorkWndTags[ WORKTOP    ] = wnd->wi_Top;
  519.         WorkWndTags[ WORKLEFT   ] = wnd->wi_Left;
  520.         WorkWndTags[ WORKWIDTH  ] = wnd->wi_Width;
  521.         WorkWndTags[ WORKHEIGHT ] = wnd->wi_Height;
  522.         WorkWndTags[ WORKTITLE  ] = wnd->wi_name;
  523.  
  524.         if( wnd->wi_NumBools ) {
  525.         gad = wnd->wi_Gadgets.mlh_Head;
  526.         while( gad->b_Kind != BOOLEAN )
  527.             gad = gad->b_Node.ln_Succ;
  528.         WorkWndTags[ WORKGADGETS ] = &gad->b_NextGadget;
  529.         } else
  530.         WorkWndTags[ WORKGADGETS ] = wnd->wi_GList;
  531.  
  532.         if( IE.mainprefs & WFLAGS )
  533.         WorkWndTags[ WORKFLAGS ] = wnd->wi_Flags | WFLG_REPORTMOUSE;
  534.         else
  535.         WorkWndTags[ WORKFLAGS ] = W_F;
  536.  
  537.         if( wnd->wi_winptr = OpenWindowShdIDCMP( WorkWndTags, WorkWIDCMP )) {
  538.  
  539.         GT_RefreshWindow( wnd->wi_winptr, NULL );
  540.         wnd->wi_flags1 |= W_APERTA;
  541.         IE.win_active = wnd->wi_winptr;
  542.         wnd->wi_winptr->UserData = wnd;
  543.         wnd->wi_winptr->ExtData  = (APTR)HandleEdit;
  544.  
  545.         if(!( IE.win_open )) {
  546.             for( cnt = 0; cnt < DISATTIVAMENU_0WND_NUM; cnt++ )
  547.             OnMenu( BackWnd, disattiva_noopen[ cnt ]);
  548.             ToolsGadgetsOn();
  549.         }
  550.  
  551.         IE.win_open += 1;
  552.  
  553.         SetMenuStrip( wnd->wi_winptr, BackMenus );
  554.         SetPointer( wnd->wi_winptr, puntatore, 13, 16, -7, -6 );
  555.  
  556.         CheckMenuToActive();
  557.  
  558.         if( IE.mainprefs & STACCATI ) {
  559.             IE.mainprefs &= ~STACCATI;
  560.             StaccaGadgets();
  561.             IE.mainprefs |= STACCATI;
  562.             RinfrescaFinestra();
  563.         }
  564.  
  565.         Stat( CatCompArray[ MSG_OPEN_WND ].cca_Str, FALSE, MSG_OPEN_WND );
  566.  
  567.         } else
  568.         Stat( CatCompArray[ ERR_NOWND ].cca_Str, TRUE, ERR_NOWND );
  569.  
  570.     }
  571.  
  572.     } else
  573.     Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  574.  
  575.     return( TRUE );
  576. }
  577. ///
  578.  
  579. /// Titolo finestra
  580. BOOL TitoloWndMenued( void )
  581. {
  582.     WORD   ret;
  583.  
  584.     LockAllWindows();
  585.  
  586.     LayoutWindow( WndTitWTags );
  587.     ret = OpenWndTitWindow();
  588.     PostOpenWindow( WndTitWTags );
  589.  
  590.     if( ret ) {
  591.     DisplayBeep( Scr );
  592.     } else {
  593.  
  594.     StringTag[1] = IE.win_info->wi_name;
  595.     GT_SetGadgetAttrsA( WndTitGadgets[ GD_TitFin ], WndTitWnd,
  596.                 NULL, (struct TagItem *)StringTag );
  597.  
  598.     StringTag[1] = IE.win_info->wi_Label;
  599.     GT_SetGadgetAttrsA( WndTitGadgets[ GD_TitLabel ], WndTitWnd,
  600.                 NULL, (struct TagItem *)StringTag );
  601.  
  602.     ActivateGadget( WndTitGadgets[ GD_TitFin ], WndTitWnd, NULL );
  603.  
  604.     while( ReqHandle( WndTitWnd, HandleWndTitIDCMP ));
  605.     }
  606.  
  607.     CloseWndTitWindow();
  608.     UnlockAllWindows();
  609.     return( TRUE );
  610. }
  611.  
  612. BOOL WndTitVanillaKey( void )
  613. {
  614.     switch( WndTitMsg.Code ) {
  615.     case 13:
  616.         return( TitFinOkClicked() );
  617.     case 27:
  618.         return( TitFinAnnullaClicked() );
  619.     }
  620.     return( TRUE );
  621. }
  622.  
  623. BOOL TitFinClicked( void )
  624. {
  625.     ActivateGadget( WndTitGadgets[ GD_TitLabel ], WndTitWnd, NULL );
  626.     return( TRUE );
  627. }
  628.  
  629. BOOL TitLabelClicked( void )
  630. {
  631.     return( TRUE );
  632. }
  633.  
  634. BOOL TitFinOkClicked( void )
  635. {
  636.     STRPTR label;
  637.  
  638.     strcpy( IE.win_info->wi_Titolo, GetString( WndTitGadgets[ GD_TitFin ]) );
  639.  
  640.     label = GetString( WndTitGadgets[ GD_TitLabel ]);
  641.  
  642.     if( label[0] )
  643.     strcpy( IE.win_info->wi_Label, label );
  644.  
  645.     SetWindowTitles( IE.win_active, IE.win_info->wi_name, (APTR)-1 );
  646.  
  647.     Stat( CatCompArray[ MSG_DONE ].cca_Str, FALSE, MSG_DONE );
  648.  
  649.     IE.flags &= ~SALVATO;
  650.  
  651.     return( FALSE );
  652. }
  653.  
  654. BOOL TitFinAnnullaClicked( void )
  655. {
  656.     return( FALSE );
  657. }
  658. ///
  659.  
  660. /// Dimensioni Finestra
  661. BOOL WndSizeMenued( void )
  662. {
  663.     int     ret;
  664.  
  665.     LockAllWindows();
  666.  
  667.     LayoutWindow( DimFinWTags );
  668.     ret = OpenDimFinWindow();
  669.     PostOpenWindow( DimFinWTags );
  670.  
  671.     if(!( ret )) {
  672.  
  673.     buffer = IE.win_info->wi_flags1;
  674.  
  675.     IntegerTag[1] = IE.win_info->wi_MinWidth;
  676.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MinW ], DimFinWnd,
  677.                 NULL, (struct TagItem *)IntegerTag );
  678.  
  679.     IntegerTag[1] = IE.win_info->wi_MaxWidth;
  680.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MaxW ], DimFinWnd,
  681.                 NULL, (struct TagItem *)IntegerTag );
  682.  
  683.     IntegerTag[1] = IE.win_info->wi_MinHeight;
  684.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MinH ], DimFinWnd,
  685.                 NULL, (struct TagItem *)IntegerTag );
  686.  
  687.     IntegerTag[1] = IE.win_info->wi_MaxHeight;
  688.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MaxH ], DimFinWnd,
  689.                 NULL, (struct TagItem *)IntegerTag );
  690.  
  691.     IntegerTag[1] = IE.win_info->wi_InnerWidth;
  692.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InW ], DimFinWnd,
  693.                 NULL, (struct TagItem *)IntegerTag );
  694.  
  695.     IntegerTag[1] = IE.win_info->wi_InnerHeight;
  696.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InH ], DimFinWnd,
  697.                 NULL, (struct TagItem *)IntegerTag );
  698.  
  699.     if( IE.win_info->wi_flags1 & W_USA_INNER_W ) {
  700.         CheckedTag[1]  = TRUE;
  701.         DisableTag[1] = FALSE;
  702.         GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InW ], DimFinWnd,
  703.                 NULL, (struct TagItem *)DisableTag );
  704.         GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InWc ], DimFinWnd,
  705.                 NULL, (struct TagItem *)CheckedTag );
  706.     }
  707.  
  708.     if( IE.win_info->wi_flags1 & W_USA_INNER_H ) {
  709.         CheckedTag[1]  = TRUE;
  710.         DisableTag[1] = FALSE;
  711.         GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InH ], DimFinWnd,
  712.                 NULL, (struct TagItem *)DisableTag );
  713.         GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InHc ], DimFinWnd,
  714.                 NULL, (struct TagItem *)CheckedTag );
  715.     }
  716.  
  717.     ret = TRUE;
  718.  
  719.     do {
  720.         WaitPort( DimFinWnd->UserPort );
  721.         ret = HandleDimFinIDCMP();
  722.     } while( ret );
  723.  
  724.     } else
  725.     DisplayBeep( Scr );
  726.  
  727.     CloseDimFinWindow();
  728.     UnlockAllWindows();
  729.  
  730.     return( TRUE );
  731. }
  732.  
  733. BOOL DimFinVanillaKey( void )
  734. {
  735.     BOOL    ret = TRUE;
  736.  
  737.     switch( DimFinMsg.Code ) {
  738.  
  739.     case 13:
  740.         ret = DF_OkClicked();
  741.         break;
  742.  
  743.     case 27:
  744.         ret = DF_AnnullaClicked();
  745.         break;
  746.     }
  747.  
  748.     return( ret );
  749. }
  750.  
  751. BOOL DF_AnnullaClicked( void )
  752. {
  753.     IE.win_info->wi_flags1 = buffer;
  754.     return( FALSE );
  755. }
  756.  
  757. BOOL DF_OkClicked( void )
  758. {
  759.     IE.win_info->wi_MinWidth    = GetNumber( DimFinGadgets[ GD_DF_MinW ]);
  760.     IE.win_info->wi_MaxWidth    = GetNumber( DimFinGadgets[ GD_DF_MaxW ]);
  761.     IE.win_info->wi_MinHeight   = GetNumber( DimFinGadgets[ GD_DF_MinH ]);
  762.     IE.win_info->wi_MaxHeight   = GetNumber( DimFinGadgets[ GD_DF_MaxH ]);
  763.     IE.win_info->wi_InnerWidth  = GetNumber( DimFinGadgets[ GD_DF_InW  ]);
  764.     IE.win_info->wi_InnerHeight = GetNumber( DimFinGadgets[ GD_DF_InH  ]);
  765.  
  766.     IE.flags &= ~SALVATO;
  767.  
  768.     return( FALSE );
  769. }
  770.  
  771. BOOL DF_MinWClicked( void )
  772. {
  773.     ActivateGadget( DimFinGadgets[ GD_DF_MaxW ], DimFinWnd, NULL );
  774.     return( TRUE );
  775. }
  776.  
  777. BOOL DF_MaxWClicked( void )
  778. {
  779.     ActivateGadget( DimFinGadgets[ GD_DF_MinH ], DimFinWnd, NULL );
  780.     return( TRUE );
  781. }
  782.  
  783. BOOL DF_MinHClicked( void )
  784. {
  785.     ActivateGadget( DimFinGadgets[ GD_DF_MaxH ], DimFinWnd, NULL );
  786.     return( TRUE );
  787. }
  788.  
  789. BOOL DF_MaxHClicked( void )
  790. {
  791.     if(!( DimFinGadgets[ GD_DF_InW ]->Flags & GFLG_DISABLED ))
  792.     ActivateGadget( DimFinGadgets[ GD_DF_InW ], DimFinWnd, NULL );
  793.     return( TRUE );
  794. }
  795.  
  796. BOOL DF_InWClicked( void )
  797. {
  798.     if(!( DimFinGadgets[ GD_DF_InH ]->Flags & GFLG_DISABLED ))
  799.     ActivateGadget( DimFinGadgets[ GD_DF_InH ], DimFinWnd, NULL );
  800.     return( TRUE );
  801. }
  802.  
  803. BOOL DF_InHClicked( void )
  804. {
  805.     return( TRUE );
  806. }
  807.  
  808. BOOL DF_MinWbClicked( void )
  809. {
  810.     IntegerTag[1] = IE.win_active->Width;
  811.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MinW ], DimFinWnd,
  812.             NULL, (struct TagItem *)IntegerTag );
  813.  
  814.     return( TRUE );
  815. }
  816.  
  817. BOOL DF_MaxWbClicked( void )
  818. {
  819.     IntegerTag[1] = IE.win_active->Width;
  820.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MaxW ], DimFinWnd,
  821.             NULL, (struct TagItem *)IntegerTag );
  822.  
  823.     return( TRUE );
  824. }
  825.  
  826. BOOL DF_MinHbClicked( void )
  827. {
  828.     IntegerTag[1] = IE.win_active->Height;
  829.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MinH ], DimFinWnd,
  830.             NULL, (struct TagItem *)IntegerTag );
  831.  
  832.     return( TRUE );
  833. }
  834.  
  835. BOOL DF_MaxHbClicked( void )
  836. {
  837.     IntegerTag[1] = IE.win_active->Height;
  838.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_MaxH ], DimFinWnd,
  839.             NULL, (struct TagItem *)IntegerTag );
  840.  
  841.     return( TRUE );
  842. }
  843.  
  844. BOOL DF_InWcKeyPressed( void )
  845. {
  846.     return( DF_InWcClicked() );
  847. }
  848.  
  849. BOOL DF_InWcClicked( void )
  850. {
  851.     IE.win_info->wi_flags1 ^= W_USA_INNER_W;
  852.  
  853.     if( IE.win_info->wi_flags1 & W_USA_INNER_W ) {
  854.     DisableTag[1] = FALSE;
  855.     CheckedTag[1]  = TRUE;
  856.     } else {
  857.     DisableTag[1] = TRUE;
  858.     CheckedTag[1]  = FALSE;
  859.     }
  860.  
  861.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InWc ], DimFinWnd,
  862.             NULL, (struct TagItem *)CheckedTag );
  863.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InW ], DimFinWnd,
  864.             NULL, (struct TagItem *)DisableTag );
  865.  
  866.     return( TRUE );
  867. }
  868.  
  869. BOOL DF_InHcKeyPressed( void )
  870. {
  871.     return( DF_InHcClicked() );
  872. }
  873.  
  874. BOOL DF_InHcClicked( void )
  875. {
  876.     IE.win_info->wi_flags1 ^= W_USA_INNER_H;
  877.  
  878.     if( IE.win_info->wi_flags1 & W_USA_INNER_H ) {
  879.     DisableTag[1] = FALSE;
  880.     CheckedTag[1]  = TRUE;
  881.     } else {
  882.     DisableTag[1] = TRUE;
  883.     CheckedTag[1]  = FALSE;
  884.     }
  885.  
  886.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InHc ], DimFinWnd,
  887.             NULL, (struct TagItem *)CheckedTag );
  888.     GT_SetGadgetAttrsA( DimFinGadgets[ GD_DF_InH ], DimFinWnd,
  889.             NULL, (struct TagItem *)DisableTag );
  890.  
  891.     return( TRUE );
  892. }
  893. ///
  894.  
  895. /// Zoom
  896. BOOL ZoomMenued( void )
  897. {
  898.     int     ret;
  899.  
  900.     LockAllWindows();
  901.  
  902.     LayoutWindow( ZoomWTags );
  903.     ret = OpenZoomWindow();
  904.     PostOpenWindow( ZoomWTags );
  905.  
  906.     if(!( ret )) {
  907.  
  908.     buffer = IE.win_info->wi_Tags;
  909.  
  910.     IntegerTag[1] = IE.win_info->wi_ZLeft;
  911.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Left ], ZoomWnd,
  912.                 NULL, (struct TagItem *)IntegerTag );
  913.  
  914.     IntegerTag[1] = IE.win_info->wi_ZTop;
  915.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Top ], ZoomWnd,
  916.                 NULL, (struct TagItem *)IntegerTag );
  917.  
  918.     IntegerTag[1] = IE.win_info->wi_ZWidth;
  919.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Width ], ZoomWnd,
  920.                 NULL, (struct TagItem *)IntegerTag );
  921.  
  922.     IntegerTag[1] = IE.win_info->wi_ZHeight;
  923.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Height ], ZoomWnd,
  924.                 NULL, (struct TagItem *)IntegerTag );
  925.  
  926.     DisableTag[1] = ( IE.win_info->wi_Tags & W_ZOOM ) ? FALSE : TRUE;
  927.     CheckedTag[1] = ( IE.win_info->wi_Tags & W_ZOOM ) ? TRUE : FALSE;
  928.  
  929.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Usa    ], ZoomWnd, NULL, (struct TagItem *)CheckedTag );
  930.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Left   ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  931.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Top    ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  932.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Width  ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  933.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Height ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  934.  
  935.     while( ReqHandle( ZoomWnd, HandleZoomIDCMP ));
  936.  
  937.     } else {
  938.     DisplayBeep( Scr );
  939.     }
  940.  
  941.     CloseZoomWindow();
  942.     UnlockAllWindows();
  943.  
  944.     return( TRUE );
  945. }
  946.  
  947. BOOL ZoomVanillaKey( void )
  948. {
  949.     switch( ZoomMsg.Code ) {
  950.     case 13:
  951.         return( Z_OkClicked() );
  952.     case 27:
  953.         return( Z_AnnullaClicked() );
  954.     }
  955. }
  956.  
  957. BOOL Z_OkClicked( void )
  958. {
  959.     IE.win_info->wi_ZLeft   = GetNumber( ZoomGadgets[ GD_Z_Left   ]);
  960.     IE.win_info->wi_ZTop    = GetNumber( ZoomGadgets[ GD_Z_Top    ]);
  961.     IE.win_info->wi_ZWidth  = GetNumber( ZoomGadgets[ GD_Z_Width  ]);
  962.     IE.win_info->wi_ZHeight = GetNumber( ZoomGadgets[ GD_Z_Height ]);
  963.  
  964.     return( FALSE );
  965. }
  966.  
  967. BOOL Z_AnnullaClicked( void )
  968. {
  969.     IE.win_info->wi_Tags = buffer;
  970.     return( FALSE );
  971. }
  972.  
  973. BOOL Z_UsaKeyPressed( void )
  974. {
  975.     if( IE.win_info->wi_Tags & W_ZOOM )
  976.     CheckedTag[1] = FALSE;
  977.     else
  978.     CheckedTag[1] = TRUE;
  979.  
  980.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Usa ], ZoomWnd, NULL, (struct TagItem *)CheckedTag );
  981.  
  982.     return( Z_UsaClicked() );
  983. }
  984.  
  985. BOOL Z_UsaClicked( void )
  986. {
  987.     IE.win_info->wi_Tags ^= W_ZOOM;
  988.  
  989.     DisableTag[1] = ( IE.win_info->wi_Tags & W_ZOOM ) ? FALSE : TRUE;
  990.  
  991.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Left   ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  992.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Top    ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  993.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Width  ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  994.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Height ], ZoomWnd, NULL, (struct TagItem *)DisableTag );
  995.  
  996.     return( TRUE );
  997. }
  998.  
  999. BOOL Z_LeftClicked( void )
  1000. {
  1001.     ActivateGadget( ZoomGadgets[ GD_Z_Top ], ZoomWnd, NULL );
  1002.     return( TRUE );
  1003. }
  1004.  
  1005. BOOL Z_TopClicked( void )
  1006. {
  1007.     ActivateGadget( ZoomGadgets[ GD_Z_Width ], ZoomWnd, NULL );
  1008.     return( TRUE );
  1009. }
  1010.  
  1011. BOOL Z_WidthClicked( void )
  1012. {
  1013.     ActivateGadget( ZoomGadgets[ GD_Z_Height ], ZoomWnd, NULL );
  1014.     return( TRUE );
  1015. }
  1016.  
  1017. BOOL Z_HeightClicked( void )
  1018. {
  1019.     return( TRUE );
  1020. }
  1021.  
  1022. BOOL Z_LbClicked( void )
  1023. {
  1024.     IntegerTag[1] = IE.win_active->LeftEdge;
  1025.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Left ], ZoomWnd, NULL, (struct TagItem *)IntegerTag );
  1026.     return( TRUE );
  1027. }
  1028.  
  1029. BOOL Z_TbClicked( void )
  1030. {
  1031.     IntegerTag[1] = IE.win_active->TopEdge;
  1032.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Top ], ZoomWnd, NULL, (struct TagItem *)IntegerTag );
  1033.     return( TRUE );
  1034. }
  1035.  
  1036. BOOL Z_WbClicked( void )
  1037. {
  1038.     IntegerTag[1] = IE.win_active->Width;
  1039.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Width ], ZoomWnd, NULL, (struct TagItem *)IntegerTag );
  1040.     return( TRUE );
  1041. }
  1042.  
  1043. BOOL Z_HbClicked( void )
  1044. {
  1045.     IntegerTag[1] = IE.win_active->Height;
  1046.     GT_SetGadgetAttrsA( ZoomGadgets[ GD_Z_Height ], ZoomWnd, NULL, (struct TagItem *)IntegerTag );
  1047.     return( TRUE );
  1048. }
  1049. ///
  1050.  
  1051. /// Window Tags
  1052. BOOL WndTagsMenued( void )
  1053. {
  1054.     int     ret, cnt;
  1055.     static WORD    gads[] = {
  1056.         GD_WTg_ScTitle,
  1057.         GD_WTg_MQ,
  1058.         GD_WTg_RQ,
  1059.         GD_WTg_Adjust,
  1060.         GD_WTg_FallBack,
  1061.         GD_WTg_NotDepth,
  1062.         GD_WTg_TabMsg,
  1063.         GD_WTg_MenuH,
  1064.         GD_WTg_LocTit,
  1065.         GD_WTg_LocScrTit,
  1066.         GD_WTg_LocGad,
  1067.         GD_WTg_LocTxt,
  1068.         GD_WTg_LocMenu,
  1069.         GD_WT_ShdPort,
  1070.         GD_WTg_Back,
  1071.         };
  1072.     static ULONG   tags[] = {
  1073.         W_SCREENTITLE,
  1074.         W_MOUSEQUEUE,
  1075.         W_RPTQUEUE,
  1076.         W_AUTOADJUST,
  1077.         W_FALLBACK,
  1078.         W_NOTIFYDEPTH,
  1079.         W_TABLETMESSAGE,
  1080.         W_MENUHELP,
  1081.         W_LOC_TITLE,
  1082.         W_LOC_SCRTITLE,
  1083.         W_LOC_GADGETS,
  1084.         W_LOC_TEXTS,
  1085.         W_LOC_MENUS,
  1086.         W_SHARED_PORT,
  1087.         W_BACKFILL,
  1088.         };
  1089.     static WORD    gads2[] = {
  1090.         GD_WTg_ScTitIn,
  1091.         GD_WTg_MQIn,
  1092.         GD_WTg_RQIn,
  1093.         };
  1094.  
  1095.     LockAllWindows();
  1096.  
  1097.     LayoutWindow( WndTagWTags );
  1098.     ret = OpenWndTagWindow();
  1099.     PostOpenWindow( WndTagWTags );
  1100.  
  1101.     if(!( ret )) {
  1102.  
  1103.     IntegerTag[1] = IE.win_info->wi_MouseQueue;
  1104.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_MQIn ], WndTagWnd,
  1105.                 NULL, (struct TagItem *)IntegerTag );
  1106.  
  1107.     IntegerTag[1] = IE.win_info->wi_RptQueue;
  1108.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_RQIn ], WndTagWnd,
  1109.                 NULL, (struct TagItem *)IntegerTag );
  1110.  
  1111.     StringTag[1] = IE.win_info->wi_TitoloSchermo;
  1112.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_ScTitIn ], WndTagWnd,
  1113.                 NULL, (struct TagItem *)StringTag );
  1114.  
  1115.     for( cnt = 0; cnt < sizeof( tags ) / sizeof( ULONG ); cnt++ ){
  1116.         CheckedTag[1] = (IE.win_info->wi_Tags & tags[ cnt ]) ? TRUE : FALSE;
  1117.         GT_SetGadgetAttrsA( WndTagGadgets[ gads[ cnt ]], WndTagWnd,
  1118.                 NULL, (struct TagItem *)CheckedTag );
  1119.     }
  1120.  
  1121.     for( cnt = 0; cnt < sizeof( gads2 ) / sizeof( WORD ); cnt++ ){
  1122.         DisableTag[1] = (IE.win_info->wi_Tags & tags[ cnt ]) ? FALSE : TRUE;
  1123.         GT_SetGadgetAttrsA( WndTagGadgets[ gads2[ cnt ]], WndTagWnd,
  1124.                 NULL, (struct TagItem *)DisableTag );
  1125.     }
  1126.  
  1127.     buffer = IE.win_info->wi_Tags;
  1128.     buffer2 = IE.win_info->wi_flags1;
  1129.     buffer3 = IE.win_info->wi_flags2;
  1130.  
  1131.     while( ReqHandle( WndTagWnd, HandleWndTagIDCMP ));
  1132.  
  1133.     } else {
  1134.     DisplayBeep( Scr );
  1135.     }
  1136.  
  1137.     CloseWndTagWindow();
  1138.     UnlockAllWindows();
  1139.  
  1140.     return( TRUE );
  1141. }
  1142.  
  1143. BOOL WndTagVanillaKey( void )
  1144. {
  1145.     switch( WndTagMsg.Code ){
  1146.     case 13:
  1147.         return( WTg_OkClicked() );
  1148.     case 27:
  1149.         return( WTg_AnnullaClicked() );
  1150.     }
  1151.  
  1152.     return( TRUE );
  1153. }
  1154.  
  1155. BOOL WTg_OkClicked( void )
  1156. {
  1157.     strcpy( IE.win_info->wi_TitoloSchermo, GetString( WndTagGadgets[ GD_WTg_ScTitIn ]) );
  1158.     IE.win_info->wi_MouseQueue = GetNumber( WndTagGadgets[ GD_WTg_MQIn ]);
  1159.     IE.win_info->wi_RptQueue   = GetNumber( WndTagGadgets[ GD_WTg_RQIn ]);
  1160.     IE.flags &= ~SALVATO;
  1161.     return( FALSE );
  1162. }
  1163.  
  1164. BOOL WTg_AnnullaClicked( void )
  1165. {
  1166.     IE.win_info->wi_Tags = buffer;
  1167.     IE.win_info->wi_flags1 = buffer2;
  1168.     IE.win_info->wi_flags2 = buffer3;
  1169.     return( FALSE );
  1170. }
  1171.  
  1172. BOOL WTg_ScTitInClicked( void )
  1173. {
  1174.     return( TRUE );
  1175. }
  1176.  
  1177. BOOL WTg_MQInClicked( void )
  1178. {
  1179.     return( TRUE );
  1180. }
  1181.  
  1182. BOOL WTg_RQInClicked( void )
  1183. {
  1184.     return( TRUE );
  1185. }
  1186.  
  1187. BOOL WTg_ScTitleKeyPressed( void )
  1188. {
  1189.     CheckedTag[1] = (IE.win_info->wi_Tags & W_SCREENTITLE) ? FALSE : TRUE;
  1190.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_ScTitle ], WndTagWnd,
  1191.             NULL, (struct TagItem *)CheckedTag );
  1192.  
  1193.     return( WTg_ScTitleClicked() );
  1194. }
  1195.  
  1196. BOOL WTg_ScTitleClicked( void )
  1197. {
  1198.     IE.win_info->wi_Tags ^= W_SCREENTITLE;
  1199.  
  1200.     DisableTag[1] = (IE.win_info->wi_Tags & W_SCREENTITLE) ? FALSE : TRUE;
  1201.  
  1202.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_ScTitIn ], WndTagWnd,
  1203.             NULL, (struct TagItem *)DisableTag );
  1204.  
  1205.     if(!( DisableTag[1] ))
  1206.     ActivateGadget( WndTagGadgets[ GD_WTg_ScTitIn ], WndTagWnd, NULL );
  1207.  
  1208.     return( TRUE );
  1209. }
  1210.  
  1211. BOOL WTg_MQKeyPressed( void )
  1212. {
  1213.     CheckedTag[1] = (IE.win_info->wi_Tags & W_MOUSEQUEUE) ? FALSE : TRUE;
  1214.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_MQ ], WndTagWnd,
  1215.             NULL, (struct TagItem *)CheckedTag );
  1216.  
  1217.     return( WTg_MQClicked() );
  1218. }
  1219.  
  1220. BOOL WTg_MQClicked( void )
  1221. {
  1222.     IE.win_info->wi_Tags ^= W_MOUSEQUEUE;
  1223.  
  1224.     DisableTag[1] = (IE.win_info->wi_Tags & W_MOUSEQUEUE) ? FALSE : TRUE;
  1225.  
  1226.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_MQIn ], WndTagWnd,
  1227.             NULL, (struct TagItem *)DisableTag );
  1228.  
  1229.     if(!( DisableTag[1] ))
  1230.     ActivateGadget( WndTagGadgets[ GD_WTg_MQIn ], WndTagWnd, NULL );
  1231.  
  1232.     return( TRUE );
  1233. }
  1234.  
  1235. BOOL WTg_RQKeyPressed( void )
  1236. {
  1237.     CheckedTag[1] = (IE.win_info->wi_Tags & W_RPTQUEUE) ? FALSE : TRUE;
  1238.  
  1239.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_RQ ], WndTagWnd,
  1240.             NULL, (struct TagItem *)CheckedTag );
  1241.  
  1242.     return( WTg_RQClicked() );
  1243. }
  1244.  
  1245. BOOL WTg_RQClicked( void )
  1246. {
  1247.     IE.win_info->wi_Tags ^= W_RPTQUEUE;
  1248.  
  1249.     DisableTag[1] = (IE.win_info->wi_Tags & W_RPTQUEUE) ? FALSE : TRUE;
  1250.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_RQIn ], WndTagWnd,
  1251.             NULL, (struct TagItem *)DisableTag );
  1252.  
  1253.     if(!( DisableTag[1] ))
  1254.     ActivateGadget( WndTagGadgets[ GD_WTg_RQIn ], WndTagWnd, NULL );
  1255.  
  1256.     return( TRUE );
  1257. }
  1258.  
  1259. BOOL WTg_AdjustKeyPressed( void )
  1260. {
  1261.     CheckedTag[1] = (IE.win_info->wi_Tags & W_AUTOADJUST) ? FALSE : TRUE;
  1262.  
  1263.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_Adjust ], WndTagWnd,
  1264.             NULL, (struct TagItem *)CheckedTag );
  1265.  
  1266.     return( WTg_AdjustClicked() );
  1267. }
  1268.  
  1269. BOOL WTg_AdjustClicked( void )
  1270. {
  1271.     IE.win_info->wi_Tags ^= W_AUTOADJUST;
  1272.     return( TRUE );
  1273. }
  1274.  
  1275. BOOL WTg_FallBackKeyPressed( void )
  1276. {
  1277.     CheckedTag[1] = (IE.win_info->wi_Tags & W_FALLBACK) ? FALSE : TRUE;
  1278.  
  1279.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_FallBack ], WndTagWnd,
  1280.             NULL, (struct TagItem *)CheckedTag );
  1281.  
  1282.     return( WTg_FallBackClicked() );
  1283. }
  1284.  
  1285. BOOL WTg_FallBackClicked( void )
  1286. {
  1287.     IE.win_info->wi_Tags ^= W_FALLBACK;
  1288.     return( TRUE );
  1289. }
  1290.  
  1291. BOOL WTg_NotDepthKeyPressed( void )
  1292. {
  1293.     CheckedTag[1] = (IE.win_info->wi_Tags & W_NOTIFYDEPTH) ? FALSE : TRUE;
  1294.  
  1295.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_NotDepth ], WndTagWnd,
  1296.             NULL, (struct TagItem *)CheckedTag );
  1297.  
  1298.     return( WTg_NotDepthClicked() );
  1299. }
  1300.  
  1301. BOOL WTg_NotDepthClicked( void )
  1302. {
  1303.     IE.win_info->wi_Tags ^= W_NOTIFYDEPTH;
  1304.     return( TRUE );
  1305. }
  1306.  
  1307. BOOL WTg_MenuHKeyPressed( void )
  1308. {
  1309.     CheckedTag[1] = (IE.win_info->wi_Tags & W_MENUHELP) ? FALSE : TRUE;
  1310.  
  1311.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_MenuH ], WndTagWnd,
  1312.             NULL, (struct TagItem *)CheckedTag );
  1313.  
  1314.     return( WTg_MenuHClicked() );
  1315. }
  1316.  
  1317. BOOL WTg_MenuHClicked( void )
  1318. {
  1319.     IE.win_info->wi_Tags ^= W_MENUHELP;
  1320.     return( TRUE );
  1321. }
  1322.  
  1323. BOOL WTg_TabMsgKeyPressed( void )
  1324. {
  1325.     CheckedTag[1] = (IE.win_info->wi_Tags & W_TABLETMESSAGE) ? FALSE : TRUE;
  1326.  
  1327.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_TabMsg ], WndTagWnd,
  1328.             NULL, (struct TagItem *)CheckedTag );
  1329.  
  1330.     return( WTg_TabMsgClicked() );
  1331. }
  1332.  
  1333. BOOL WTg_TabMsgClicked( void )
  1334. {
  1335.     IE.win_info->wi_Tags ^= W_TABLETMESSAGE;
  1336.     return( TRUE );
  1337. }
  1338.  
  1339. BOOL WTg_LocTitKeyPressed( void )
  1340. {
  1341.     CheckedTag[1] = (IE.win_info->wi_Tags & W_LOC_TITLE) ? FALSE : TRUE;
  1342.  
  1343.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_LocTit ], WndTagWnd,
  1344.             NULL, (struct TagItem *)CheckedTag );
  1345.  
  1346.     return( WTg_LocTitClicked() );
  1347. }
  1348.  
  1349. BOOL WTg_LocTitClicked( void )
  1350. {
  1351.     IE.win_info->wi_Tags ^= W_LOC_TITLE;
  1352.     return( TRUE );
  1353. }
  1354.  
  1355. BOOL WTg_LocScrTitKeyPressed( void )
  1356. {
  1357.     CheckedTag[1] = (IE.win_info->wi_Tags & W_LOC_SCRTITLE) ? FALSE : TRUE;
  1358.  
  1359.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_LocScrTit ], WndTagWnd,
  1360.             NULL, (struct TagItem *)CheckedTag );
  1361.  
  1362.     return( WTg_LocScrTitClicked() );
  1363. }
  1364.  
  1365. BOOL WTg_LocScrTitClicked( void )
  1366. {
  1367.     IE.win_info->wi_Tags ^= W_LOC_SCRTITLE;
  1368.     return( TRUE );
  1369. }
  1370.  
  1371. BOOL WTg_LocGadKeyPressed( void )
  1372. {
  1373.     CheckedTag[1] = (IE.win_info->wi_Tags & W_LOC_GADGETS) ? FALSE : TRUE;
  1374.  
  1375.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_LocGad ], WndTagWnd,
  1376.             NULL, (struct TagItem *)CheckedTag );
  1377.  
  1378.     return( WTg_LocGadClicked() );
  1379. }
  1380.  
  1381. BOOL WTg_LocGadClicked( void )
  1382. {
  1383.     IE.win_info->wi_Tags ^= W_LOC_GADGETS;
  1384.     return( TRUE );
  1385. }
  1386.  
  1387. BOOL WTg_LocTxtKeyPressed( void )
  1388. {
  1389.     CheckedTag[1] = (IE.win_info->wi_Tags & W_LOC_TEXTS) ? FALSE : TRUE;
  1390.  
  1391.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_LocTxt ], WndTagWnd,
  1392.             NULL, (struct TagItem *)CheckedTag );
  1393.  
  1394.     return( WTg_LocTxtClicked() );
  1395. }
  1396.  
  1397. BOOL WTg_LocTxtClicked( void )
  1398. {
  1399.     IE.win_info->wi_Tags ^= W_LOC_TEXTS;
  1400.     return( TRUE );
  1401. }
  1402.  
  1403. BOOL WTg_LocMenuKeyPressed( void )
  1404. {
  1405.     CheckedTag[1] = (IE.win_info->wi_Tags & W_LOC_MENUS) ? FALSE : TRUE;
  1406.  
  1407.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_LocMenu ], WndTagWnd,
  1408.             NULL, (struct TagItem *)CheckedTag );
  1409.  
  1410.     return( WTg_LocMenuClicked() );
  1411. }
  1412.  
  1413. BOOL WTg_LocMenuClicked( void )
  1414. {
  1415.     IE.win_info->wi_Tags ^= W_LOC_MENUS;
  1416.     return( TRUE );
  1417. }
  1418.  
  1419. BOOL WT_ShdPortKeyPressed( void )
  1420. {
  1421.     CheckedTag[1] = (IE.win_info->wi_Tags & W_SHARED_PORT) ? FALSE : TRUE;
  1422.  
  1423.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WT_ShdPort ], WndTagWnd,
  1424.             NULL, (struct TagItem *)CheckedTag );
  1425.  
  1426.     return( WT_ShdPortClicked() );
  1427. }
  1428.  
  1429. BOOL WT_ShdPortClicked( void )
  1430. {
  1431.     IE.win_info->wi_Tags ^= W_SHARED_PORT;
  1432.  
  1433.     return( TRUE );
  1434. }
  1435.  
  1436. BOOL WTg_BackKeyPressed( void )
  1437. {
  1438.     CheckedTag[1] = (IE.win_info->wi_Tags & W_BACKFILL) ? FALSE : TRUE;
  1439.  
  1440.     GT_SetGadgetAttrsA( WndTagGadgets[ GD_WTg_Back ], WndTagWnd,
  1441.             NULL, (struct TagItem *)CheckedTag );
  1442.  
  1443.     return( WTg_BackClicked() );
  1444. }
  1445.  
  1446. BOOL WTg_BackClicked( void )
  1447. {
  1448.     IE.win_info->wi_Tags ^= W_BACKFILL;
  1449.  
  1450.     return( TRUE );
  1451. }
  1452. ///
  1453.  
  1454. /// Usa i flags settati
  1455. BOOL UseWFlagsMenued( void )
  1456. {
  1457.     struct WindowInfo  *wnd;
  1458.  
  1459.     IE.mainprefs ^= WFLAGS;
  1460.  
  1461.     for( wnd = IE.win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  1462.     if( wnd->wi_flags1 & W_APERTA ) {
  1463.         SettaWFlags( wnd );
  1464.     }
  1465.     }
  1466.  
  1467.     return( TRUE );
  1468. }
  1469. ///
  1470.  
  1471. /// Get Wnd
  1472. struct WindowInfo *GetWnd( void )
  1473. {
  1474.     struct WindowInfo  *wnd = NULL;
  1475.     int                 num, cnt;
  1476.  
  1477.     if( ApriListaFin( CatCompArray[ REQ_OPENW ].cca_Str, 0, &IE.win_list )) {
  1478.  
  1479.     num = GestisciListaFin( EXIT, IE.num_win );
  1480.     ChiudiListaFin();
  1481.  
  1482.     if( num >= 0 ) {
  1483.  
  1484.         wnd = (struct WindowInfo *)&IE.win_list.mlh_Head;
  1485.         for( cnt = 0; cnt <= num; cnt++ )
  1486.         wnd = wnd->wi_succ;
  1487.     }
  1488.     }
  1489.  
  1490.     return( wnd );
  1491. }
  1492. ///
  1493.  
  1494. /// Add Txt
  1495. BOOL AddTxtMenued( void )
  1496. {
  1497.     struct ITextNode   *itn, *itn2;
  1498.     BOOL                canc = FALSE;
  1499.  
  1500.     if( itn = AllocObject( IE_INTUITEXT )) {
  1501.  
  1502.     AddTail(( struct List * )&IE.win_info->wi_ITexts, (struct Node * )itn );
  1503.  
  1504.     itn->itn_FrontPen = 1;
  1505.  
  1506.     if( EditText( itn )) {
  1507.  
  1508.         RinfrescaFinestra();
  1509.  
  1510.         if( MoveText( itn ))  {
  1511.  
  1512.         if( IE.win_info->wi_NumTexts ) {
  1513.             itn2 = itn->itn_Node.ln_Pred;
  1514.             itn2->itn_NextText = &itn->itn_FrontPen;
  1515.         }
  1516.  
  1517.         IE.win_info->wi_NumTexts += 1;
  1518.  
  1519.         RinfrescaFinestra();
  1520.         CheckMenuToActive();
  1521.  
  1522.         IE.flags &= ~SALVATO;
  1523.  
  1524.         } else {
  1525.         canc = TRUE;
  1526.         }
  1527.     } else {
  1528.         canc = TRUE;
  1529.     }
  1530.  
  1531.     if( canc ) {
  1532.         Remove(( struct Node * )itn );
  1533.         FreeObject( itn, IE_INTUITEXT );
  1534.         Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  1535.     } else {
  1536.         Stat( ok_txt+1, FALSE, 0 );
  1537.     }
  1538.     } else {
  1539.     Stat( CatCompArray[ ERR_NOMEMORY ].cca_Str, TRUE, 0 );
  1540.     }
  1541.  
  1542.     return( TRUE );
  1543. }
  1544. ///
  1545.  
  1546. /// Edit Text
  1547. BOOL EditTxtMenued( void )
  1548. {
  1549.     struct ITextNode *itn;
  1550.  
  1551.     if( itn = GetText() )
  1552.     EditText( itn );
  1553.  
  1554.     return( TRUE );
  1555. }
  1556.  
  1557. BOOL EditText( struct ITextNode *itn )
  1558. {
  1559.     ULONG   *ptr;
  1560.     int     ret;
  1561.     APTR    old_font;
  1562.     UBYTE   old_FP, old_BP, old_DM, dm;
  1563.     int     cnt;
  1564.  
  1565.     LockAllWindows();
  1566.  
  1567.     ptr = ITextGTags;
  1568.  
  1569.     while( *ptr++ != GTPA_Depth ) {}
  1570.     *ptr++ = IE.ScreenData->Tags[ SCRDEPTH ];
  1571.  
  1572.     while( *ptr++ != GTPA_Depth ) {}
  1573.     *ptr = IE.ScreenData->Tags[ SCRDEPTH ];
  1574.  
  1575.     old_font = itn->itn_ITextFont;
  1576.     old_BP   = itn->itn_BackPen;
  1577.     old_FP   = itn->itn_FrontPen;
  1578.     old_DM   = itn->itn_DrawMode;
  1579.  
  1580.     LayoutWindow( ITextWTags );
  1581.     ret = OpenITextWindow();
  1582.     PostOpenWindow( ITextWTags );
  1583.  
  1584.     if(!( ret )) {
  1585.  
  1586.     PaletteTag[1] = itn->itn_FrontPen;
  1587.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_FPen ], ITextWnd,
  1588.                 NULL, (struct TagItem *)PaletteTag );
  1589.  
  1590.     PaletteTag2[1] = itn->itn_BackPen;
  1591.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_BPen ], ITextWnd,
  1592.                 NULL, (struct TagItem *)PaletteTag2 );
  1593.  
  1594.     StringTag[1] = itn->itn_Node.ln_Name;
  1595.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_Txt ], ITextWnd,
  1596.                 NULL, (struct TagItem *)StringTag );
  1597.  
  1598.     dm = itn->itn_DrawMode & ~INVERSVID;
  1599.     cnt = 0;
  1600.  
  1601.     while( DrawModes[ cnt ] != dm )
  1602.         cnt++;
  1603.  
  1604.     CycleTag[1] = cnt;
  1605.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_Mode ], ITextWnd,
  1606.                 NULL, (struct TagItem *)CycleTag );
  1607.  
  1608.     CheckedTag[1] = ( itn->itn_DrawMode & INVERSVID ) ? TRUE : FALSE;
  1609.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_Inv ], ITextWnd,
  1610.                 NULL, (struct TagItem *)CheckedTag );
  1611.  
  1612.     CheckedTag[1] = ( itn->itn_Node.ln_Type & IT_SCRFONT ) ? TRUE : FALSE;
  1613.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_ScrFont ], ITextWnd,
  1614.                 NULL, (struct TagItem *)CheckedTag );
  1615.  
  1616.     buffer = itn;
  1617.  
  1618.     RetCode = 0;
  1619.  
  1620.     do {
  1621.         ReqHandle( ITextWnd, HandleITextIDCMP );
  1622.     } while(!( RetCode ));
  1623.  
  1624.     if( RetCode < 1 ) {
  1625.  
  1626.         strcpy( itn->itn_Text, GetString( ITextGadgets[ GD_TXT_Txt ]) );
  1627.         IE.flags &= ~SALVATO;
  1628.         ret = TRUE;
  1629.  
  1630.     } else {
  1631.  
  1632.         itn->itn_FrontPen  = old_FP;
  1633.         itn->itn_BackPen   = old_BP;
  1634.         itn->itn_DrawMode  = old_DM;
  1635.         itn->itn_ITextFont = old_font;
  1636.  
  1637.         ret = FALSE;
  1638.  
  1639.     }
  1640.  
  1641.     } else {
  1642.     DisplayBeep( Scr );
  1643.     }
  1644.  
  1645.     CloseITextWindow();
  1646.  
  1647.     UnlockAllWindows();
  1648.  
  1649.     return( ret );
  1650. }
  1651.  
  1652.  
  1653. BOOL ITextVanillaKey( void )
  1654. {
  1655.     switch( ITextMsg.Code ) {
  1656.     case 27:
  1657.         RetCode = 1;
  1658.         break;
  1659.     case 13:
  1660.         RetCode = -1;
  1661.         break;
  1662.     }
  1663. }
  1664.  
  1665.  
  1666. BOOL TXT_OkClicked( void )
  1667. {
  1668.     RetCode = -1;
  1669. }
  1670.  
  1671. BOOL TXT_AnnullaClicked( void )
  1672. {
  1673.     RetCode = 1;
  1674. }
  1675.  
  1676. BOOL TXT_FPenKeyPressed( void )
  1677. {
  1678.     UWORD   c, max = (1 << IE.ScreenData->Tags[ SCRDEPTH ]) - 1;
  1679.  
  1680.     c = PaletteTag[1];
  1681.  
  1682.     if( ITextMsg.Code & 0x20 ) {        // minuscolo
  1683.     if( c < max )
  1684.         c++;
  1685.     else
  1686.         c = max;
  1687.     } else {                            // MAIUSCOLO
  1688.     if( c )
  1689.         c--;
  1690.     else
  1691.         c = max;
  1692.     }
  1693.  
  1694.     PaletteTag[1] = ITextMsg.Code = c;
  1695.  
  1696.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_FPen ], ITextWnd,
  1697.             NULL, (struct TagItem *)PaletteTag );
  1698.  
  1699.     TXT_FPenClicked();
  1700. }
  1701.  
  1702. BOOL TXT_FPenClicked( void )
  1703. {
  1704.     ((struct ITextNode *)buffer)->itn_FrontPen = PaletteTag[1] = ITextMsg.Code;
  1705. }
  1706.  
  1707. BOOL TXT_BPenKeyPressed( void )
  1708. {
  1709.     UWORD   c, max = (1 << IE.ScreenData->Tags[ SCRDEPTH ]) - 1;
  1710.  
  1711.     c = PaletteTag2[1];
  1712.  
  1713.     if( ITextMsg.Code & 0x20 ) {        // minuscolo
  1714.     if( c < max )
  1715.         c++;
  1716.     else
  1717.         c = 0;
  1718.     } else {                            // MAIUSCOLO
  1719.     if( c )
  1720.         c--;
  1721.     else
  1722.         c = max;
  1723.     }
  1724.  
  1725.     PaletteTag2[1] = ITextMsg.Code = c;
  1726.  
  1727.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_BPen ], ITextWnd,
  1728.             NULL, (struct TagItem *)PaletteTag2 );
  1729.  
  1730.     TXT_BPenClicked();
  1731. }
  1732.  
  1733. BOOL TXT_BPenClicked( void )
  1734. {
  1735.     ((struct ITextNode *)buffer)->itn_BackPen = PaletteTag2[1] = ITextMsg.Code;
  1736.  
  1737.     return( TRUE );
  1738. }
  1739.  
  1740. BOOL TXT_ScrFontKeyPressed( void )
  1741. {
  1742.     if((( struct ITextNode *)buffer)->itn_Node.ln_Type & IT_SCRFONT)
  1743.     CheckedTag[1] = FALSE;
  1744.     else
  1745.     CheckedTag[1] = TRUE;
  1746.  
  1747.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_ScrFont ], ITextWnd,
  1748.             NULL, (struct TagItem *)CheckedTag );
  1749.  
  1750.     TXT_ScrFontClicked();
  1751.  
  1752.     return( TRUE );
  1753. }
  1754.  
  1755. BOOL TXT_ScrFontClicked( void )
  1756. {
  1757.     ((struct ITextNode *)buffer)->itn_Node.ln_Type ^= IT_SCRFONT;
  1758.     if((( struct ITextNode *)buffer)->itn_Node.ln_Type & IT_SCRFONT) {
  1759.     ((struct ITextNode *)buffer)->itn_ITextFont = NULL;
  1760.     } else {
  1761.     ((struct ITextNode *)buffer)->itn_ITextFont = ((struct ITextNode *)buffer)->itn_FontCopy;
  1762.     }
  1763.  
  1764.     return( TRUE );
  1765. }
  1766.  
  1767. BOOL TXT_ModeKeyPressed( void )
  1768. {
  1769.     int     c;
  1770.  
  1771.     c = CycleTag[1];
  1772.  
  1773.     if( ITextMsg.Code & 0x20 ) {        // minuscolo
  1774.     if( c < 2 )
  1775.         c++;
  1776.     else
  1777.         c = 0;
  1778.     } else {                            // MAIUSCOLO
  1779.     if( c )
  1780.         c--;
  1781.     else
  1782.         c = 2;
  1783.     }
  1784.  
  1785.     CycleTag[1] = ITextMsg.Code = c;
  1786.  
  1787.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_Mode ], ITextWnd,
  1788.             NULL, (struct TagItem *)CycleTag );
  1789.  
  1790.     TXT_ModeClicked();
  1791.  
  1792.     return( TRUE );
  1793. }
  1794.  
  1795. BOOL TXT_ModeClicked( void )
  1796. {
  1797.     CycleTag[1] = ITextMsg.Code;
  1798.     ((struct ITextNode *)buffer)->itn_DrawMode = (((struct ITextNode *)buffer)->itn_DrawMode & INVERSVID) | DrawModes[ ITextMsg.Code ];
  1799. }
  1800.  
  1801. BOOL TXT_InvKeyPressed( void )
  1802. {
  1803.     if((( struct ITextNode *)buffer)->itn_DrawMode & INVERSVID )
  1804.     CheckedTag[1] = FALSE;
  1805.     else
  1806.     CheckedTag[1] = TRUE;
  1807.  
  1808.     GT_SetGadgetAttrsA( ITextGadgets[ GD_TXT_Inv ], ITextWnd,
  1809.             NULL, (struct TagItem *)CheckedTag );
  1810.  
  1811.     TXT_InvClicked();
  1812. }
  1813.  
  1814. BOOL TXT_InvClicked( void )
  1815. {
  1816.     ((struct ITextNode *)buffer)->itn_DrawMode ^= INVERSVID;
  1817. }
  1818.  
  1819. BOOL TXT_FontKeyPressed( void )
  1820. {
  1821.     TXT_FontClicked();
  1822. }
  1823.  
  1824. BOOL TXT_FontClicked( void )
  1825. {
  1826.     struct TxtAttrNode *ta;
  1827.     struct TextAttr    *old;
  1828.  
  1829.     old = ( ((struct ITextNode *)buffer)->itn_FontCopy ) ? ((struct ITextNode *)buffer)->itn_FontCopy : NULL;
  1830.  
  1831.     if( ta = FontRequest( old, "Scegli un font per il testo..." , ASL_TEXTFONT )) {
  1832.  
  1833.     if( old )
  1834.         EliminaFont(( struct TxtAttrNode *)((ULONG)old - 14 ));
  1835.  
  1836.     ((struct ITextNode *)buffer)->itn_FontCopy = &ta->txa_FontName;
  1837.  
  1838.     if(!( (( struct ITextNode *)buffer)->itn_Node.ln_Type & IT_SCRFONT ))
  1839.         ((struct ITextNode *)buffer)->itn_ITextFont = ((struct ITextNode *)buffer)->itn_FontCopy;
  1840.  
  1841.     RinfrescaFinestra();
  1842.     }
  1843. }
  1844.  
  1845. BOOL TXT_TxtClicked( void )
  1846. {
  1847. }
  1848. ///
  1849.  
  1850. /// Move Text
  1851. BOOL MoveText( struct ITextNode *txt )
  1852. {
  1853.     UBYTE               old_DM;
  1854.     struct IntuiMessage *msg;
  1855.     BOOL                ok = TRUE, ret = TRUE;
  1856.     int                 code;
  1857.     ULONG               class;
  1858.     struct Window      *wnd;
  1859.  
  1860.     buffer = txt->itn_NextText;
  1861.     txt->itn_NextText = NULL;
  1862.     buffer2 = txt->itn_LeftEdge;
  1863.     buffer3 = txt->itn_TopEdge;
  1864.  
  1865.     old_DM = txt->itn_DrawMode;
  1866.  
  1867.     IE.win_active->Flags |= WFLG_RMBTRAP;
  1868.  
  1869.     txt->itn_DrawMode |= COMPLEMENT;
  1870.     txt->itn_LeftEdge  = IE.win_active->MouseX;
  1871.     txt->itn_TopEdge   = IE.win_active->MouseY;
  1872.  
  1873.     PrintIText( IE.win_active->RPort, (struct IntuiText *)&txt->itn_FrontPen, 0, 0 );
  1874.  
  1875.     Stat( CatCompArray[ MSG_MOVETEXT ].cca_Str, FALSE, 0 );
  1876.  
  1877.     do {
  1878.     WaitPort( IE.win_active->UserPort );
  1879.  
  1880.     if( msg = GT_GetIMsg( IE.win_active->UserPort )) {
  1881.  
  1882.         class = msg->Class;
  1883.         code  = msg->Code;
  1884.         wnd   = msg->IDCMPWindow;
  1885.  
  1886.         GT_ReplyIMsg( msg );
  1887.  
  1888.         switch( class ) {
  1889.  
  1890.         case IDCMP_REFRESHWINDOW:
  1891.             GT_BeginRefresh( IE.win_active );
  1892.             GT_EndRefresh( IE.win_active, TRUE );
  1893.             break;
  1894.  
  1895.         case IDCMP_MOUSEBUTTONS:
  1896.             switch( code ) {
  1897.             case 0xE8:
  1898.                 Stat( ok_txt+1, FALSE, 0 );
  1899.                 ok = FALSE;
  1900.                 break;
  1901.  
  1902.             case 0x69:
  1903.                 txt->itn_LeftEdge = buffer2;
  1904.                 txt->itn_TopEdge  = buffer3;
  1905.                 Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  1906.                 ret = ok = FALSE;
  1907.                 break;
  1908.             }
  1909.             break;
  1910.  
  1911.         case IDCMP_MOUSEMOVE:
  1912.             PrintIText( IE.win_active->RPort, (struct IntuiText *)&txt->itn_FrontPen, 0, 0 );
  1913.             mousex = txt->itn_LeftEdge = IE.win_active->MouseX;
  1914.             mousey = txt->itn_TopEdge  = IE.win_active->MouseY;
  1915.             PrintIText( IE.win_active->RPort, (struct IntuiText *)&txt->itn_FrontPen, 0, 0 );
  1916.             Coord();
  1917.             break;
  1918.         }
  1919.     }
  1920.     } while( ok );
  1921.  
  1922.     PrintIText( IE.win_active->RPort, (struct IntuiText *)&txt->itn_FrontPen, 0, 0 );
  1923.  
  1924.     IE.win_active->Flags &= ~WFLG_RMBTRAP;
  1925.     txt->itn_DrawMode = old_DM;
  1926.     txt->itn_NextText = (APTR)buffer;
  1927.  
  1928.     return( ret );
  1929. }
  1930.  
  1931. BOOL MoveTextMenued( void )
  1932. {
  1933.     struct ITextNode *txt;
  1934.  
  1935.     if( txt = GetText() ) {
  1936.  
  1937.     RinfrescaFinestra();
  1938.  
  1939.     if( MoveText( txt )) {
  1940.         RinfrescaFinestra();
  1941.         IE.flags &= ~SALVATO;
  1942.     }
  1943.     }
  1944.  
  1945.     return( TRUE );
  1946. }
  1947. ///
  1948.  
  1949. /// Get Text
  1950. struct ITextNode *GetText( void )
  1951. {
  1952.     struct ITextNode *txt = NULL;
  1953.     WORD              num, cnt;
  1954.  
  1955.     if( ApriListaFin( CatCompArray[ REQ_GETTEXT ].cca_Str, 0, &IE.win_info->wi_ITexts )) {
  1956.  
  1957.     num = GestisciListaFin( EXIT, IE.win_info->wi_NumTexts );
  1958.  
  1959.     if( num >= 0 ) {
  1960.         txt = &IE.win_info->wi_ITexts.mlh_Head;
  1961.         for( cnt = 0; cnt <= num; cnt++ )
  1962.         txt = txt->itn_Node.ln_Succ;
  1963.     }
  1964.  
  1965.     ChiudiListaFin();
  1966.     } else {
  1967.     DisplayBeep( Scr );
  1968.     }
  1969.  
  1970.     return( txt );
  1971. }
  1972. ///
  1973.  
  1974. /// Del Text
  1975. BOOL DelTextMenued( void )
  1976. {
  1977.     struct ITextNode *txt, *pred, *succ;
  1978.  
  1979.     if( txt = GetText() ) {
  1980.  
  1981.     pred = txt->itn_Node.ln_Pred;
  1982.     succ = txt->itn_Node.ln_Succ;
  1983.  
  1984.     if( pred->itn_Node.ln_Pred ) {
  1985.         if( succ->itn_Node.ln_Succ )
  1986.         pred->itn_NextText = &succ->itn_FrontPen;
  1987.         else
  1988.         pred->itn_NextText = NULL;
  1989.     }
  1990.  
  1991.     Remove(( struct Node *)txt );
  1992.  
  1993.     FreeObject( txt, IE_INTUITEXT );
  1994.  
  1995.     IE.win_info->wi_NumTexts -= 1;
  1996.  
  1997.     CheckMenuToActive();
  1998.     RinfrescaFinestra();
  1999.     IE.flags &= ~SALVATO;
  2000.     }
  2001.  
  2002.     return( TRUE );
  2003. }
  2004. ///
  2005.  
  2006. /// Get Image
  2007. struct WndImages *GetImg( void )
  2008. {
  2009.     struct WndImages   *img;
  2010.  
  2011.     Stat( CatCompArray[ MSG_SELECTIMG ].cca_Str, FALSE, 0 );
  2012.  
  2013. forever:
  2014.     if( WaitButton() ) {
  2015.         for( img = IE.win_info->wi_Images.mlh_Head; img->wim_Next; img = img->wim_Next ){
  2016.         if(( clickx >= img->wim_Left ) && ( clickx < img->wim_Left + img->wim_Width ) && ( clicky >= img->wim_Top ) && ( clicky < img->wim_Top + img->wim_Height )) {
  2017.             Stat( &ok_txt[1], FALSE, 0 );
  2018.             return( img );
  2019.         }
  2020.         }
  2021.     } else
  2022.         return( NULL );
  2023.  
  2024.     goto forever;
  2025.  
  2026. }
  2027. ///
  2028.  
  2029. /// MoveImage
  2030. BOOL MoveImgMenued( void )
  2031. {
  2032.     struct WndImages   *img;
  2033.     UBYTE               code;
  2034.     struct MyRect       r;
  2035.  
  2036.     if( img = GetImg() ) {
  2037.  
  2038.     r.Left   = img->wim_Left;
  2039.     r.Top    = img->wim_Top;
  2040.     r.Width  = img->wim_Width;
  2041.     r.Height = img->wim_Height;
  2042.  
  2043.     code = MoveRect( clickx, clicky, &r );
  2044.  
  2045.     if( code == 0x69 )
  2046.         Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, 0 );
  2047.     else {
  2048.         img->wim_Left = r.Left;
  2049.         img->wim_Top  = r.Top;
  2050.         RinfrescaFinestra();
  2051.         IE.flags &= ~SALVATO;
  2052.     }
  2053.  
  2054.     }
  2055.  
  2056.     return( TRUE );
  2057. }
  2058. ///
  2059.  
  2060. /// Del Image
  2061. BOOL DelImgMenued( void )
  2062. {
  2063.     struct WndImages *img, *pred, *succ;
  2064.  
  2065.     if( img = GetImg() ) {
  2066.  
  2067.     pred = img->wim_Prev;
  2068.     succ = img->wim_Next;
  2069.  
  2070.     if( pred->wim_Prev ) {
  2071.         if( succ->wim_Next ){
  2072.         pred->wim_NextImage = &succ->wim_Left;
  2073.         } else {
  2074.         pred->wim_NextImage = NULL;
  2075.         }
  2076.     }
  2077.  
  2078.     Remove(( struct Node *)img );
  2079.  
  2080.     FreeObject( img, IE_WNDIMAGE );
  2081.  
  2082.     IE.win_info->wi_NumImages -= 1;
  2083.  
  2084.     CheckMenuToActive();
  2085.     RinfrescaFinestra();
  2086.     IE.flags &= ~SALVATO;
  2087.     }
  2088.  
  2089.     return( TRUE );
  2090. }
  2091. ///
  2092.  
  2093. /// Add Img
  2094. BOOL AddImgMenued( void )
  2095. {
  2096.     int                 cnt, num;
  2097.     struct ImageNode   *img;
  2098.     struct WndImages   *wi, *pred;
  2099.     struct MyRect       r;
  2100.     UBYTE               code;
  2101.  
  2102.     if( IE.NumImgs ) {
  2103.     if( ApriListaFin( CatCompArray[ REQ_GETIMG ].cca_Str, REQ_GETIMG, &IE.Img_List )) {
  2104.  
  2105.         num = GestisciListaFin( EXIT, IE.NumImgs-1 );
  2106.         ChiudiListaFin();
  2107.  
  2108.         RinfrescaFinestra();
  2109.  
  2110.         if( num >= 0 ) {
  2111.  
  2112.         img = (struct ImageNode *)&IE.Img_List.mlh_Head;
  2113.         for( cnt = 0; cnt <= num; cnt++ )
  2114.             img = img->in_Node.ln_Succ;
  2115.  
  2116.         r.Width  = img->in_Width;
  2117.         r.Height = img->in_Height;
  2118.         r.Left   = IE.win_active->MouseX - ( r.Width >> 1 );
  2119.         r.Top    = IE.win_active->MouseY - ( r.Height >> 1 );
  2120.  
  2121.         code = MoveRect( IE.win_active->MouseX, IE.win_active->MouseY, &r );
  2122.  
  2123.         if( code == 0x69 )
  2124.             Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  2125.         else {
  2126.             if ( wi = AllocObject( IE_WNDIMAGE )) {
  2127.  
  2128.             AddTail((struct List *)&IE.win_info->wi_Images, (struct Node *)wi );
  2129.  
  2130.             IE.win_info->wi_NumImages += 1;
  2131.  
  2132.             wi->wim_Left        = r.Left;
  2133.             wi->wim_Top         = r.Top;
  2134.             wi->wim_Width       = r.Width;
  2135.             wi->wim_Height      = r.Height;
  2136.             wi->wim_Depth       = img->in_Depth;
  2137.             wi->wim_Data        = img->in_Data;
  2138.             wi->wim_PlanePick   = img->in_PlanePick;
  2139.             wi->wim_PlaneOnOff  = img->in_PlaneOnOff;
  2140.             wi->wim_ImageNode   = img;
  2141.  
  2142.             pred = wi->wim_Prev;
  2143.             if( pred->wim_Prev )
  2144.                 pred->wim_NextImage = &wi->wim_Left;
  2145.  
  2146.             RinfrescaFinestra();
  2147.             CheckMenuToActive();
  2148.             IE.flags &= ~SALVATO;
  2149.  
  2150.             } else {
  2151.             Stat( CatCompArray[ ERR_NOMEMORY ].cca_Str, TRUE, 0 );
  2152.             }
  2153.         }
  2154.  
  2155.         SetDrMd( IE.win_active->RPort, JAM1 );
  2156.         }
  2157.     }
  2158.     }
  2159.  
  2160.     return( TRUE );
  2161. }
  2162. ///
  2163.  
  2164. /// Add Box
  2165. BOOL AddBoxMenued( void )
  2166. {
  2167.     struct BevelBoxNode *box;
  2168.     BOOL                 ok = FALSE;
  2169.  
  2170.     if( box = AllocObject( IE_BEVELBOX )) {
  2171.  
  2172.     AddTail(( struct List * )&IE.win_info->wi_Boxes, (struct Node *)box );
  2173.  
  2174.     box->bb_FrameType  = BBFT_BUTTON;
  2175.  
  2176.     Stat( "Traccia il Bevel Box...", FALSE, MSG_DRAWBBOX );
  2177.  
  2178.     if( WaitButton() )
  2179.         ok = TraceRect();
  2180.  
  2181.     if(!( ok )) {
  2182.         Remove((struct Node *)box );
  2183.         FreeObject( box, IE_BEVELBOX );
  2184.     } else {
  2185.  
  2186.         box->bb_Left    = clickx;
  2187.         box->bb_Top     = clicky;
  2188.         box->bb_Width   = mousex - clickx + 1;
  2189.         box->bb_Height  = mousey - clicky + 1;
  2190.  
  2191.         IE.win_info->wi_NumBoxes += 1;
  2192.  
  2193.         OnMenu( BackWnd, (1<<11)|(16<<5)|1 );
  2194.  
  2195.         RinfrescaFinestra();
  2196.  
  2197.         Stat( &ok_txt[1], FALSE, 0 );
  2198.     }
  2199.  
  2200.     } else {
  2201.     Stat( CatCompArray[ ERR_NOMEMORY ].cca_Str, TRUE, 0 );
  2202.     }
  2203.  
  2204.     return( TRUE );
  2205. }
  2206. ///
  2207.  
  2208. /// Edit Boxes
  2209. BOOL EditBoxesMenued( void )
  2210. {
  2211.     struct GadgetInfo      *gad;
  2212.     struct BevelBoxNode    *box;
  2213.     int                     ret, code;
  2214.     ULONG                   sig, mask, req_mask;
  2215.     ULONG                   class;
  2216.     struct Window          *wnd, *this;
  2217.     struct IntuiMessage    *msg;
  2218.  
  2219.     ContornoGadgets( FALSE );
  2220.  
  2221.     for( gad = IE.win_info->wi_Gadgets.mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  2222.     if( gad->g_flags2 & G_ATTIVO ) {
  2223.         gad->g_flags2 &= ~G_ATTIVO;
  2224.         gad->g_flags2 |= G_WAS_ACTIVE;
  2225.     }
  2226.     }
  2227.  
  2228.     LayoutWindow( BBoxWTags );
  2229.     ret = OpenBBoxWindow();
  2230.     PostOpenWindow( BBoxWTags );
  2231.  
  2232.     if (!( ret )) {
  2233.  
  2234.     req_mask = 1 << BBoxWnd->UserPort->mp_SigBit;
  2235.     mask = req_mask | editing_mask;
  2236.  
  2237.     this = IE.win_active;
  2238.     buffer = 0L;
  2239.  
  2240.     IE.win_active->Flags |= WFLG_RMBTRAP;
  2241.  
  2242.     for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next )
  2243.         box->bb_Flags &= ~BB_SELECTED;
  2244.  
  2245.     ret = TRUE;
  2246.     do {
  2247.         sig = Wait( mask );
  2248.  
  2249.         if( sig & editing_mask ) {
  2250.         while( msg = GT_GetIMsg( IDCMP_Port )) {
  2251.  
  2252.             class = msg->Class;
  2253.             code  = msg->Code;
  2254.             wnd   = msg->IDCMPWindow;
  2255.  
  2256.             GT_ReplyIMsg( msg );
  2257.  
  2258.             IE.win_info   = wnd->UserData;
  2259.             IE.win_active = wnd;
  2260.  
  2261.             if( class == IDCMP_REFRESHWINDOW ) {
  2262.             if( this == wnd )
  2263.                 EditingBox( FALSE );
  2264.             RinfrescaFinestra();
  2265.             if( this == wnd )
  2266.                 EditingBox( TRUE );
  2267.             }
  2268.  
  2269.             if( this != wnd ) {
  2270.                 ActivateWindow( this );
  2271.                 IE.win_info = this->UserData;
  2272.                 IE.win_active = this;
  2273.                 Stat( "Ora non puoi cambiare finestra!", FALSE, MSG_NOOTHERWND );
  2274.             } else {
  2275.  
  2276.             switch( class ) {
  2277.  
  2278.                 case IDCMP_MOUSEMOVE:
  2279.                 Coord();
  2280.                 if( IE.flags & MOVE ) {
  2281.                     MuoviBoxes( wnd->MouseX, wnd->MouseY );
  2282.                     IE.flags &= ~MOVE;
  2283.                 }
  2284.                 break;
  2285.  
  2286.                 case IDCMP_MOUSEBUTTONS:
  2287.                 switch( code ) {
  2288.                     case 0x68:
  2289.                     mousex = wnd->MouseX;
  2290.                     mousey = wnd->MouseY;
  2291.                     if (!( BB_CheckResize() )) {
  2292.                         EditingBox( FALSE );
  2293.                         for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next ) {
  2294.                         box->bb_Flags &= ~BB_SELECTED;
  2295.                         }
  2296.                         if( box = CheckBox() ) {
  2297.                         BB_EDable( TRUE );
  2298.                         box->bb_Flags |= BB_SELECTED;
  2299.                         BB_SistemaXYGads();
  2300.                         EditingBox( TRUE );
  2301.                         IE.flags |= MOVE;
  2302.                         } else {
  2303.                         BB_EDable( FALSE );
  2304.                         }
  2305.                     }
  2306.                     break;
  2307.  
  2308.                     case 0xE8:
  2309.                     IE.flags &= ~MOVE;
  2310.                     break;
  2311.                 }
  2312.                 break;
  2313.             }
  2314.             }
  2315.         }
  2316.         }
  2317.  
  2318.         if( sig & req_mask )
  2319.         ret = HandleBBoxIDCMP();
  2320.  
  2321.     } while( ret );
  2322.  
  2323.     IE.win_active->Flags &= ~WFLG_RMBTRAP;
  2324.     EditingBox( FALSE );
  2325.     IE.flags &= ~MOVE;
  2326.  
  2327.     IE.win_info->wi_Top    = this->TopEdge;
  2328.     IE.win_info->wi_Left   = this->LeftEdge;
  2329.     IE.win_info->wi_Width  = this->Width;
  2330.     IE.win_info->wi_Height = this->Height;
  2331.     IE.win_info->wi_InnerWidth  = this->Width - this->BorderLeft - this->BorderRight;
  2332.     IE.win_info->wi_InnerHeight = this->Height - this->BorderTop - this->BorderBottom;
  2333.  
  2334.     } else {
  2335.     DisplayBeep( Scr );
  2336.     }
  2337.  
  2338.     CloseBBoxWindow();
  2339.  
  2340.     for( gad = IE.win_info->wi_Gadgets.mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  2341.     if( gad->g_flags2 & G_WAS_ACTIVE ) {
  2342.         gad->g_flags2 |= G_ATTIVO;
  2343.         gad->g_flags2 &= ~G_WAS_ACTIVE;
  2344.     }
  2345.     }
  2346.  
  2347.     ContornoGadgets( TRUE );
  2348.  
  2349.     return( TRUE );
  2350. }
  2351.  
  2352. BOOL BBoxCloseWindow( void )
  2353. {
  2354.     return( FALSE );
  2355. }
  2356.  
  2357. BOOL BBoxVanillaKey( void )
  2358. {
  2359.     if( BBoxMsg.Code == 27 )
  2360.     return( FALSE );
  2361.  
  2362.     return( TRUE );
  2363. }
  2364.  
  2365. struct BevelBoxNode *GetBoxSel( void )
  2366. {
  2367.     struct BevelBoxNode *box;
  2368.  
  2369.     for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next )
  2370.     if( box->bb_Flags & BB_SELECTED )
  2371.         return( box );
  2372.  
  2373.     return( NULL );
  2374. }
  2375.  
  2376. BOOL BB_XClicked( void )
  2377. {
  2378.     struct BevelBoxNode *box;
  2379.  
  2380.     box = GetBoxSel();
  2381.     box->bb_Left = GetNumber( BBoxGadgets[ GD_BB_X ]);
  2382.  
  2383.     BB_Update();
  2384.  
  2385.     IE.flags &= ~SALVATO;
  2386.  
  2387.     ActivateGadget( BBoxGadgets[ GD_BB_Y ], BBoxWnd, NULL );
  2388.  
  2389.     return( TRUE );
  2390. }
  2391.  
  2392. BOOL BB_YClicked( void )
  2393. {
  2394.     struct BevelBoxNode *box;
  2395.  
  2396.     box = GetBoxSel();
  2397.     box->bb_Top = GetNumber( BBoxGadgets[ GD_BB_Y ]);
  2398.  
  2399.     BB_Update();
  2400.  
  2401.     IE.flags &= ~SALVATO;
  2402.  
  2403.     ActivateGadget( BBoxGadgets[ GD_BB_W ], BBoxWnd, NULL );
  2404.  
  2405.     return( TRUE );
  2406. }
  2407.  
  2408. BOOL BB_WClicked( void )
  2409. {
  2410.     struct BevelBoxNode *box;
  2411.  
  2412.     box = GetBoxSel();
  2413.     box->bb_Width = GetNumber( BBoxGadgets[ GD_BB_W ]);
  2414.  
  2415.     BB_Update();
  2416.  
  2417.     IE.flags &= ~SALVATO;
  2418.  
  2419.     ActivateGadget( BBoxGadgets[ GD_BB_H ], BBoxWnd, NULL );
  2420.  
  2421.     return( TRUE );
  2422. }
  2423.  
  2424. BOOL BB_HClicked( void )
  2425. {
  2426.     struct BevelBoxNode *box;
  2427.  
  2428.     box = GetBoxSel();
  2429.     box->bb_Height = GetNumber( BBoxGadgets[ GD_BB_H ]);
  2430.  
  2431.     BB_Update();
  2432.  
  2433.     IE.flags &= ~SALVATO;
  2434.  
  2435.     return( TRUE );
  2436. }
  2437.  
  2438. void BB_Update( void )
  2439. {
  2440.     EditingBox( FALSE );
  2441.     RinfrescaFinestra();
  2442.     EditingBox( TRUE );
  2443. }
  2444.  
  2445. BOOL BB_DeleteClicked( void )
  2446. {
  2447.     struct BevelBoxNode *box;
  2448.     BOOL                ret = TRUE;
  2449.  
  2450.     box = GetBoxSel();
  2451.  
  2452.     IE.win_info->wi_NumBoxes -= 1;
  2453.  
  2454.     if(!( IE.win_info->wi_NumBoxes )) {
  2455.     OffMenu( BackWnd, (1<<11)|(16<<5)|1 );
  2456.     ret = FALSE;
  2457.     }
  2458.  
  2459.     Remove((struct Node *)box);
  2460.  
  2461.     FreeObject( box, IE_BEVELBOX );
  2462.  
  2463.     EditingBox( FALSE );
  2464.     RinfrescaFinestra();
  2465.     EditingBox( TRUE );
  2466.  
  2467.     BB_EDable( FALSE );
  2468.  
  2469.     return( ret );
  2470. }
  2471.  
  2472. BOOL BBoxIntuiTicks( void )
  2473. {
  2474.     void                    ( *func )( struct BevelBoxNode * );
  2475.     struct BevelBoxNode    *box;
  2476.  
  2477.     if( func = (APTR)buffer ) {
  2478.     if( box = GetBoxSel() ) {
  2479.  
  2480.         EditingBox( FALSE );
  2481.         ( *func )( box );
  2482.         EditingBox( TRUE );
  2483.  
  2484.         IE.flags &= ~SALVATO;
  2485.     }
  2486.     }
  2487.  
  2488.     return( TRUE );
  2489. }
  2490.  
  2491. void BB_MoveUp( struct BevelBoxNode *box )
  2492. {
  2493.     box->bb_Top -= 1;
  2494. }
  2495.  
  2496. void BB_MoveDown( struct BevelBoxNode *box )
  2497. {
  2498.     box->bb_Top += 1;
  2499. }
  2500.  
  2501. void BB_MoveRight( struct BevelBoxNode *box )
  2502. {
  2503.     box->bb_Left += 1;
  2504. }
  2505.  
  2506. void BB_MoveLeft( struct BevelBoxNode *box )
  2507. {
  2508.     box->bb_Left -= 1;
  2509. }
  2510.  
  2511. BOOL BB_UpClicked( void )
  2512. {
  2513.     if( BBoxMsg.Class == IDCMP_GADGETDOWN )
  2514.     buffer = (APTR)BB_MoveUp;
  2515.     else
  2516.     EndBoxMove();
  2517.     return( TRUE );
  2518. }
  2519.  
  2520. BOOL BB_DownClicked( void )
  2521. {
  2522.     if( BBoxMsg.Class == IDCMP_GADGETDOWN )
  2523.     buffer = (APTR)BB_MoveDown;
  2524.     else
  2525.     EndBoxMove();
  2526.     return( TRUE );
  2527. }
  2528.  
  2529. BOOL BB_RightClicked( void )
  2530. {
  2531.     if( BBoxMsg.Class == IDCMP_GADGETDOWN )
  2532.     buffer = (APTR)BB_MoveRight;
  2533.     else
  2534.     EndBoxMove();
  2535.     return( TRUE );
  2536. }
  2537.  
  2538. BOOL BB_LeftClicked( void )
  2539. {
  2540.     if( BBoxMsg.Class == IDCMP_GADGETDOWN )
  2541.     buffer = (APTR)BB_MoveLeft;
  2542.     else
  2543.     EndBoxMove();
  2544.     return( TRUE );
  2545. }
  2546.  
  2547. void EndBoxMove( void )
  2548. {
  2549.     EditingBox( FALSE );
  2550.     RinfrescaFinestra();
  2551.     buffer = 0L;
  2552.     EditingBox( TRUE );
  2553. }
  2554.  
  2555. void BB_SistemaXYGads( void )
  2556. {
  2557.     struct BevelBoxNode *box;
  2558.  
  2559.     if( box = GetBoxSel() ) {
  2560.  
  2561.     IntegerTag[1] = box->bb_Left;
  2562.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_X ], BBoxWnd, NULL, (struct TagItem *)IntegerTag );
  2563.  
  2564.     IntegerTag[1] = box->bb_Top;
  2565.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_Y ], BBoxWnd, NULL, (struct TagItem *)IntegerTag );
  2566.  
  2567.     IntegerTag[1] = box->bb_Width;
  2568.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_W ], BBoxWnd, NULL, (struct TagItem *)IntegerTag );
  2569.  
  2570.     IntegerTag[1] = box->bb_Height;
  2571.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_H ], BBoxWnd, NULL, (struct TagItem *)IntegerTag );
  2572.  
  2573.     BB_SistemaRecessed( box );
  2574.     BB_SistemaType( box );
  2575.     }
  2576. }
  2577.  
  2578. void BB_EDable( BOOL what )
  2579. {
  2580.     struct Gadget  *gad;
  2581.     int             cnt, pos;
  2582.     static UWORD   gads[] = {
  2583.             GD_BB_X,
  2584.             GD_BB_Y,
  2585.             GD_BB_W,
  2586.             GD_BB_H,
  2587.             GD_BB_Recessed,
  2588.             GD_BB_Type
  2589.             };
  2590.  
  2591.     pos = RemoveGList( BBoxWnd, &BB_LeftGadget, 5 );
  2592.  
  2593.     gad = &BB_LeftGadget;
  2594.  
  2595.     for( cnt = 0; cnt < 5; cnt++ ) {
  2596.     if( what )
  2597.         gad->Flags &= ~GFLG_DISABLED;
  2598.     else
  2599.         gad->Flags |= GFLG_DISABLED;
  2600.     gad = gad->NextGadget;
  2601.     }
  2602.  
  2603.     AddGList( BBoxWnd, &BB_LeftGadget, pos, 5, NULL );
  2604.     RefreshGList( &BB_LeftGadget, BBoxWnd, NULL, 5 );
  2605.  
  2606.     DisableTag[1] = what ? FALSE : TRUE;
  2607.     for( cnt = 0; cnt < 6; cnt++ )
  2608.     GT_SetGadgetAttrsA( BBoxGadgets[ gads[ cnt ]], BBoxWnd,
  2609.                 NULL, (struct TagItem *)DisableTag );
  2610. }
  2611.  
  2612. BOOL BB_TypeClicked( void )
  2613. {
  2614.     struct BevelBoxNode *box;
  2615.  
  2616.     if( box = GetBoxSel() ) {
  2617.  
  2618.     EditingBox( FALSE );
  2619.     box->bb_FrameType = BBoxMsg.Code + 1;
  2620.     RinfrescaFinestra();
  2621.     EditingBox( TRUE );
  2622.  
  2623.     IE.flags &= ~SALVATO;
  2624.     }
  2625.  
  2626.     return( TRUE );
  2627. }
  2628.  
  2629. BOOL BB_RecessedKeyPressed( void )
  2630. {
  2631.     struct BevelBoxNode *box;
  2632.  
  2633.     if ( box = GetBoxSel() ) {
  2634.  
  2635.     CheckedTag[1] = box->bb_Recessed ? FALSE : TRUE;
  2636.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_Recessed ], BBoxWnd,
  2637.                 NULL, (struct TagItem *)CheckedTag );
  2638.  
  2639.     return( BB_RecessedClicked() );
  2640.  
  2641.     } else {
  2642.     return( TRUE );
  2643.     }
  2644. }
  2645.  
  2646. BOOL BB_RecessedClicked( void )
  2647. {
  2648.     struct BevelBoxNode *box;
  2649.  
  2650.     if( box = GetBoxSel() ) {
  2651.  
  2652.     box->bb_Recessed = ~box->bb_Recessed;
  2653.  
  2654.     if( box->bb_Recessed )
  2655.         box->bb_RTag = GTBB_Recessed;
  2656.     else
  2657.         box->bb_RTag = TAG_IGNORE;
  2658.  
  2659.     BB_SistemaRecessed( box );
  2660.     EditingBox( FALSE );
  2661.     RinfrescaFinestra();
  2662.     EditingBox( TRUE );
  2663.     IE.flags &= ~SALVATO;
  2664.     }
  2665.  
  2666.     return( TRUE );
  2667. }
  2668.  
  2669. void BB_SistemaRecessed( struct BevelBoxNode *box )
  2670. {
  2671.     CheckedTag[1] = box->bb_Recessed;
  2672.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_Recessed ], BBoxWnd,
  2673.             NULL, (struct TagItem *)CheckedTag );
  2674. }
  2675.  
  2676. void BB_SistemaType( struct BevelBoxNode *box )
  2677. {
  2678.     MXTag[1] = box->bb_FrameType - 1;
  2679.     GT_SetGadgetAttrsA( BBoxGadgets[ GD_BB_Type ], BBoxWnd, NULL, (struct TagItem *)MXTag );
  2680. }
  2681.  
  2682. BOOL BB_CheckResize( void )
  2683. {
  2684.     struct BevelBoxNode *box;
  2685.     WORD                x, y, xb, yb;
  2686.     BOOL                ret = FALSE;
  2687.  
  2688.     if(!( box = GetBoxSel() ))
  2689.     return( FALSE );
  2690.  
  2691.     x = IE.win_active->MouseX;
  2692.     y = IE.win_active->MouseY;
  2693.  
  2694.     xb = box->bb_Left;
  2695.     yb = box->bb_Top;
  2696.  
  2697.     if( x >= xb ) {
  2698.     if( x <= xb + Q_W ) {           // fascia sinistra
  2699.         if( y >= yb ) {             // fascia superiore
  2700.         if( y <= yb + Q_H ) {   // angolo alto sinistra
  2701.             x = xb + box->bb_Width - 1;
  2702.             y = yb + box->bb_Height - 1;
  2703.             ret = TRUE;
  2704.         } else {
  2705.             yb += (box->bb_Height - 1);
  2706.             if(( y <= yb ) && ( y >= yb - Q_H )) { // basso a sinistra
  2707.             x = xb + box->bb_Width - 1;
  2708.             y = box->bb_Top;
  2709.             ret = TRUE;
  2710.             }
  2711.         }
  2712.         }
  2713.     } else {
  2714.         xb += (box->bb_Width - 1);
  2715.         if(( x <= xb ) && ( x >= xb - Q_W )) {  // fascia destra
  2716.         if( y >= yb ) {
  2717.             if( y <= yb + Q_H ) {           // alto a destra
  2718.             x = box->bb_Left;
  2719.             y = yb + box->bb_Height - 1;
  2720.             ret = TRUE;
  2721.             } else {
  2722.             yb += (box->bb_Height - 1);
  2723.             if(( y <= yb ) && ( y >= yb - Q_H )) { // basso a destra
  2724.                 x = box->bb_Left;
  2725.                 y = box->bb_Top;
  2726.                 ret = TRUE;
  2727.             }
  2728.             }
  2729.         }
  2730.         }
  2731.     }
  2732.     }
  2733.  
  2734.     if( ret ) {
  2735.  
  2736.     offx = clickx = x;
  2737.     offy = clicky = y;
  2738.  
  2739.     if( TraceRect() ) {
  2740.  
  2741.         box->bb_Left    = clickx;
  2742.         box->bb_Top     = clicky;
  2743.         box->bb_Width   = mousex - clickx + 1;
  2744.         box->bb_Height  = mousey - clicky + 1;
  2745.  
  2746.         EditingBox( FALSE );
  2747.         RinfrescaFinestra();
  2748.         EditingBox( TRUE );
  2749.         BB_SistemaXYGads();
  2750.         IE.flags &= ~SALVATO;
  2751.  
  2752.     }
  2753.     }
  2754.  
  2755.     return( ret );
  2756. }
  2757. ///
  2758.  
  2759. /// CheckBox
  2760. struct BevelBoxNode *CheckBox( void )
  2761. {
  2762.     struct BevelBoxNode    *box, *ret = NULL;
  2763.     ULONG                   area, area2 = -1;
  2764.  
  2765.     for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next )
  2766.     if(( mousex >= box->bb_Left ) && ( mousex < box->bb_Left + box->bb_Width ) && ( mousey >= box->bb_Top ) && ( mousey < box->bb_Top + box->bb_Height ))
  2767.         box->bb_Flags |= BB_MAYBE;
  2768.  
  2769.  
  2770.     for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next ) {
  2771.     if( box->bb_Flags & BB_MAYBE ) {
  2772.         box->bb_Flags &= ~BB_MAYBE;
  2773.         area = box->bb_Width * box->bb_Height;
  2774.         if( area < area2 ){
  2775.         area2 = area;
  2776.         ret = box;
  2777.         }
  2778.     }
  2779.     }
  2780.  
  2781.     return( ret );
  2782. }
  2783. ///
  2784.  
  2785. /// Get Box
  2786. struct BevelBoxNode *GetBox( void )
  2787. {
  2788.     Stat( CatCompArray[ MSG_SELECTBOX ].cca_Str, FALSE, 0 );
  2789.     if( WaitButton() ) {
  2790.     Stat( &ok_txt[1], FALSE, 0 );
  2791.     return( CheckBox() );
  2792.     }
  2793. }
  2794. ///
  2795.  
  2796. /// Editing Box
  2797. void EditingBox( BOOL what )
  2798. {
  2799.     struct BevelBoxNode *box;
  2800.  
  2801.     SetDrMd( IE.win_active->RPort, COMPLEMENT );
  2802.  
  2803.     for( box = IE.win_info->wi_Boxes.mlh_Head; box->bb_Next; box = box->bb_Next ) {
  2804.     if( what ) {
  2805.         if( box->bb_Flags & BB_SELECTED ) {
  2806.         if(!( box->bb_Flags & G_CONTORNO )) {
  2807.             box->bb_Flags |= G_CONTORNO;
  2808.             DisegnaContorno( box->bb_Left, box->bb_Top, box->bb_Width, box->bb_Height );
  2809.         }
  2810.         }
  2811.     } else {
  2812.         if( box->bb_Flags & G_CONTORNO ) {
  2813.         box->bb_Flags &= ~G_CONTORNO;
  2814.         DisegnaContorno( box->bb_Left, box->bb_Top, box->bb_Width, box->bb_Height );
  2815.         }
  2816.     }
  2817.     }
  2818.  
  2819.     SetDrMd( IE.win_active->RPort, JAM1 );
  2820. }
  2821. ///
  2822.  
  2823. /// Muovi Boxes
  2824. void MuoviBoxes( WORD x, WORD y )
  2825. {
  2826.     struct BevelBoxNode *box;
  2827.     struct MyRect       r;
  2828.     UBYTE               code;
  2829.  
  2830.     box = GetBoxSel();
  2831.  
  2832.     EditingBox( FALSE );
  2833.  
  2834.     r.Left   = box->bb_Left;
  2835.     r.Top    = box->bb_Top;
  2836.     r.Width  = box->bb_Width;
  2837.     r.Height = box->bb_Height;
  2838.  
  2839.     code = MoveRect( x, y, &r );
  2840.  
  2841.     if( code != 0x69 ) {
  2842.     box->bb_Left = r.Left;
  2843.     box->bb_Top  = r.Top;
  2844.     }
  2845.  
  2846.     RinfrescaFinestra();
  2847.  
  2848.     EditingBox( TRUE );
  2849.  
  2850.     BB_SistemaXYGads();
  2851.  
  2852.     IE.flags &= ~SALVATO;
  2853. }
  2854. ///
  2855.  
  2856. /// Move Rect
  2857. UBYTE MoveRect( UWORD x, UWORD y, struct MyRect *r )
  2858. {
  2859.     int     code = 0;
  2860.     WORD    x2, y2;
  2861.     struct IntuiMessage *msg;
  2862.     struct Window       *wnd;
  2863.     ULONG                class;
  2864.  
  2865.     offx = x - r->Left;
  2866.     offy = y - r->Top;
  2867.  
  2868.     ActivateWindow( IE.win_active );
  2869.     WindowToFront( IE.win_active );
  2870.  
  2871.     IE.win_active->Flags |= WFLG_RMBTRAP;
  2872.     SetDrMd( IE.win_active->RPort, COMPLEMENT );
  2873.  
  2874.     Rect( r->Left, r->Top, r->Left + r->Width - 1, r->Top + r->Height - 1 );
  2875.  
  2876. forever:
  2877.     WaitPort( IE.win_active->UserPort );
  2878.  
  2879.     while( msg = GT_GetIMsg( IE.win_active->UserPort )) {
  2880.  
  2881.         class = msg->Class;
  2882.         code  = msg->Code;
  2883.         wnd   = msg->IDCMPWindow;
  2884.  
  2885.         GT_ReplyIMsg( msg );
  2886.  
  2887.         if( IE.win_active == wnd ){
  2888.  
  2889.         x2 = IE.win_active->MouseX - offx;
  2890.         y2 = IE.win_active->MouseY - offy;
  2891.  
  2892.         switch( class ) {
  2893.  
  2894.             case IDCMP_MOUSEBUTTONS:
  2895.             if( code != 0xE9 )
  2896.                 goto done;
  2897.             break;
  2898.  
  2899.             case IDCMP_MOUSEMOVE:
  2900.             code = 0;
  2901.             Coord();
  2902.             Rect( r->Left, r->Top,
  2903.                   r->Left + r->Width  - 1,
  2904.                   r->Top  + r->Height - 1 );
  2905.             r->Left = x2;
  2906.             r->Top  = y2;
  2907.             Rect( r->Left, r->Top,
  2908.                   r->Left + r->Width  - 1,
  2909.                   r->Top  + r->Height - 1 );
  2910.             break;
  2911.         }
  2912.         }
  2913.     }
  2914.     goto forever;
  2915.  
  2916. done:
  2917.  
  2918.     Rect( r->Left, r->Top,
  2919.       r->Left + r->Width  - 1,
  2920.       r->Top  + r->Height - 1 );
  2921.  
  2922.     offx = offy = 0;
  2923.     Coord();
  2924.  
  2925.     SetDrMd( IE.win_active->RPort, JAM1 );
  2926.     IE.win_active->Flags &= ~WFLG_RMBTRAP;
  2927.  
  2928.     return( code );
  2929. }
  2930. ///
  2931.  
  2932. /// Disegna Contorno
  2933. void DisegnaContorno( WORD x, WORD y, UWORD w, UWORD h )
  2934. {
  2935.     WORD    x2, y2;
  2936.  
  2937.     Rect( x, y, x + w - 1, y + h - 1 );
  2938.  
  2939.     y2 = y + Q_H + 1;
  2940.  
  2941.     // alto a sinistra
  2942.     RectFill( IE.win_active->RPort, x + 1, y + 1, x + Q_W + 1, y2 );
  2943.  
  2944.     x2 = x + w - 2;
  2945.  
  2946.     // alto a destra
  2947.     RectFill( IE.win_active->RPort, x2 - Q_W, y, x2, y2 );
  2948.  
  2949.     y2 = y + h - 2;
  2950.  
  2951.     // basso a destra
  2952.     RectFill( IE.win_active->RPort, x2 - Q_W, y2 - Q_H, x2, y2 );
  2953.  
  2954.     // basso a sinistra
  2955.     RectFill( IE.win_active->RPort, x + 1, y2 - Q_H, x + 1 + Q_W, y2);
  2956. }
  2957. ///
  2958.  
  2959. /// Wait Button
  2960. BOOL WaitButton( void )
  2961. {
  2962.     BOOL                    ret = FALSE, ok = TRUE;
  2963.     struct IntuiMessage    *msg;
  2964.     int                     code;
  2965.     ULONG                   class;
  2966.     struct Window          *wnd;
  2967.  
  2968.     IE.win_active->Flags |= WFLG_RMBTRAP;
  2969.  
  2970.     do {
  2971.  
  2972.     WaitPort( IE.win_active->UserPort );
  2973.  
  2974.     while( msg = GT_GetIMsg( IE.win_active->UserPort )) {
  2975.  
  2976.         class = msg->Class;
  2977.         code  = msg->Code;
  2978.         wnd   = msg->IDCMPWindow;
  2979.  
  2980.         GT_ReplyIMsg( msg );
  2981.  
  2982.         switch( class ) {
  2983.  
  2984.         case IDCMP_REFRESHWINDOW:
  2985.             buffer  = IE.win_info;
  2986.             buffer2 = IE.win_active;
  2987.             IE.win_info = wnd->UserData;
  2988.             IE.win_active = wnd;
  2989.             RinfrescaFinestra();
  2990.             IE.win_info = (APTR)buffer;
  2991.             IE.win_active = (APTR)buffer2;
  2992.             break;
  2993.  
  2994.         case IDCMP_MOUSEMOVE:
  2995.             Coord();
  2996.             break;
  2997.  
  2998.         case IDCMP_MOUSEBUTTONS:
  2999.             switch( code ) {
  3000.             case 0x68:
  3001.                 ret = TRUE;
  3002.                 ok = FALSE;
  3003.                 clickx = wnd->MouseX;
  3004.                 clicky = wnd->MouseY;
  3005.                 break;
  3006.             case 0x69:
  3007.                 Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  3008.                 ok = FALSE;
  3009.                 break;
  3010.             }
  3011.             break;
  3012.         }
  3013.     }
  3014.     } while( ok );
  3015.  
  3016.     IE.win_active->Flags &= ~WFLG_RMBTRAP;
  3017.  
  3018.     return( ret );
  3019. }
  3020. ///
  3021.  
  3022. /// Trace Rect
  3023. BOOL TraceRect( void )
  3024. {
  3025.     BOOL                 ret = FALSE, ok = TRUE;
  3026.     struct IntuiMessage *msg;
  3027.     struct Window       *wnd;
  3028.     int                  code, swap;
  3029.     ULONG                class;
  3030.  
  3031.     offx = mousex = clickx;
  3032.     offy = mousey = clicky;
  3033.  
  3034.     IE.win_active->Flags |= WFLG_RMBTRAP;
  3035.     SetDrMd( IE.win_active->RPort, COMPLEMENT );
  3036.  
  3037.     do {
  3038.  
  3039.     WaitPort( IDCMP_Port );
  3040.  
  3041.     while( msg = GT_GetIMsg( IDCMP_Port )) {
  3042.  
  3043.         class = msg->Class;
  3044.         code  = msg->Code;
  3045.         wnd   = msg->IDCMPWindow;
  3046.  
  3047.         GT_ReplyIMsg( msg );
  3048.  
  3049.         switch( class ) {
  3050.  
  3051.         case IDCMP_REFRESHWINDOW:
  3052.             {
  3053.             APTR    info, act;
  3054.             info  = IE.win_info;
  3055.             act   = IE.win_active;
  3056.             IE.win_info   = wnd->UserData;
  3057.             IE.win_active = wnd;
  3058.             RinfrescaFinestra();
  3059.             IE.win_info   = info;
  3060.             IE.win_active = act;
  3061.             }
  3062.             SetDrMd( IE.win_active->RPort, COMPLEMENT );
  3063.             break;
  3064.  
  3065.         case IDCMP_MOUSEBUTTONS:
  3066.             switch( code ) {
  3067.             case 0xE8:
  3068.                 ok = FALSE;
  3069.                 ret = TRUE;
  3070.                 break;
  3071.             case 0x69:
  3072.                 ok = FALSE;
  3073.                 Stat( CatCompArray[ MSG_ABORTED ].cca_Str, FALSE, MSG_ABORTED );
  3074.                 break;
  3075.             }
  3076.             break;
  3077.  
  3078.         case IDCMP_MOUSEMOVE:
  3079.             Rect( clickx, clicky, mousex, mousey );
  3080.             Coord();
  3081.             Rect( clickx, clicky, mousex, mousey );
  3082.             break;
  3083.         }
  3084.     }
  3085.     } while( ok );
  3086.  
  3087.     offx = offy = 0;
  3088.     Coord();
  3089.  
  3090.     if( clickx > mousex ) {
  3091.     swap = clickx;
  3092.     clickx = mousex;
  3093.     mousex = swap;
  3094.     }
  3095.  
  3096.     if( clicky > mousey ) {
  3097.     swap = clicky;
  3098.     clicky = mousey;
  3099.     mousey = swap;
  3100.     }
  3101.  
  3102.     Rect( clickx, clicky, mousex, mousey );
  3103.  
  3104.     IE.win_active->Flags &= ~WFLG_RMBTRAP;
  3105.     SetDrMd( IE.win_active->RPort, JAM1 );
  3106.     return( ret );
  3107. }
  3108. ///
  3109.  
  3110. /// Setta gli IDCMP
  3111. BOOL IDCMPClicked( void )
  3112. {
  3113.     return( IDCMPMenued() );
  3114. }
  3115.  
  3116. BOOL IDCMPMenued( void )
  3117. {
  3118.     struct Node    *node;
  3119.     int             cnt;
  3120.  
  3121.     list_from_eor = idcmps;
  3122.     list_to_eor   = &IE.win_info->wi_IDCMP;
  3123.  
  3124.     node = listidcmp.mlh_Head;
  3125.  
  3126.     for( cnt = 0; cnt < NUM_IDCMPS; cnt++ ){
  3127.     if( IE.win_info->wi_IDCMP & idcmps[ cnt ])
  3128.         node->ln_Name[0] = '*';
  3129.     else
  3130.         node->ln_Name[0] = ' ';
  3131.     node = node->ln_Succ;
  3132.     }
  3133.  
  3134.     if( ApriListaFin( CatCompArray[ REQ_SETIDCMP ].cca_Str, 0, &listidcmp )) {
  3135.  
  3136.     GestisciListaFin( MARK_SELECTED, NUM_IDCMPS );
  3137.     ChiudiListaFin();
  3138.     IE.flags &= ~SALVATO;
  3139.  
  3140.     }
  3141.  
  3142.     return( TRUE );
  3143. }
  3144. ///
  3145.  
  3146. /// Setta i flags
  3147. BOOL WFlagsClicked( void )
  3148. {
  3149.     return( WndFlagsMenued() );
  3150. }
  3151.  
  3152. BOOL WndFlagsMenued( void )
  3153. {
  3154.     struct Node    *node;
  3155.     int             cnt;
  3156.  
  3157.     list_from_eor = wflgs;
  3158.     list_to_eor   = &IE.win_info->wi_Flags;
  3159.  
  3160.     node = listflags.mlh_Head;
  3161.  
  3162.     for( cnt = 0; cnt < NUM_FLAGS; cnt++ ){
  3163.     if( IE.win_info->wi_Flags & wflgs[ cnt ])
  3164.         node->ln_Name[0] = '*';
  3165.     else
  3166.         node->ln_Name[0] = ' ';
  3167.     node = node->ln_Succ;
  3168.     }
  3169.  
  3170.     if(!( IE.win_info->wi_Flags & WFLG_REFRESHBITS ))
  3171.     smartrefresh_txt[0] = '*';
  3172.  
  3173.     if( ApriListaFin( CatCompArray[ REQ_SETFLAGS ].cca_Str, 0, &listflags )) {
  3174.  
  3175.     GestisciListaFin( MARK_SELECTED, NUM_FLAGS );
  3176.     ChiudiListaFin();
  3177.     IE.flags &= ~SALVATO;
  3178.  
  3179.     if( IE.mainprefs & WFLAGS )
  3180.         SettaWFlags( IE.win_info );
  3181.  
  3182.     }
  3183.  
  3184.     return( TRUE );
  3185. }
  3186. ///
  3187.  
  3188. /// Setta i flags di una finestra di editing
  3189. void SettaWFlags( struct WindowInfo *wnd )
  3190. {
  3191.     struct BooleanInfo *gad;
  3192.  
  3193.     ContornoGadgets( FALSE );
  3194.  
  3195.     CloseWindowSafely( wnd->wi_winptr );
  3196.  
  3197.     WorkWndTags[ WORKTOP    ] = wnd->wi_Top;
  3198.     WorkWndTags[ WORKLEFT   ] = wnd->wi_Left;
  3199.     WorkWndTags[ WORKWIDTH  ] = wnd->wi_Width;
  3200.     WorkWndTags[ WORKHEIGHT ] = wnd->wi_Height;
  3201.     WorkWndTags[ WORKTITLE  ] = wnd->wi_name;
  3202.  
  3203.     if( wnd->wi_NumBools ) {
  3204.     gad = wnd->wi_Gadgets.mlh_Head;
  3205.     while( gad->b_Kind != BOOLEAN )
  3206.         gad = gad->b_Node.ln_Succ;
  3207.     WorkWndTags[ WORKGADGETS ] = &gad->b_NextGadget;
  3208.     } else
  3209.     WorkWndTags[ WORKGADGETS ] = wnd->wi_GList;
  3210.  
  3211.     WorkWndTags[ WORKFLAGS ] = ( IE.mainprefs & WFLAGS ) ? ( wnd->wi_Flags | WFLG_REPORTMOUSE ) : W_F;
  3212.  
  3213.     if( wnd->wi_winptr = OpenWindowShdIDCMP( WorkWndTags, WorkWIDCMP )) {
  3214.  
  3215.     wnd->wi_flags1 |= W_APERTA;
  3216.     IE.win_info   = wnd->wi_winptr->UserData = wnd;
  3217.     IE.win_active = wnd->wi_winptr;
  3218.     wnd->wi_winptr->ExtData = (APTR)HandleEdit;
  3219.  
  3220.     GT_RefreshWindow( IE.win_active, NULL );
  3221.     SetMenuStrip( IE.win_active, BackMenus );
  3222.     SetPointer( IE.win_active, puntatore, 13, 16, -7, -6 );
  3223.  
  3224.     if( IE.mainprefs & STACCATI ) {
  3225.         IE.mainprefs &= ~STACCATI;
  3226.         StaccaGadgets();
  3227.         IE.mainprefs |= STACCATI;
  3228.     }
  3229.  
  3230.     RinfrescaFinestra();
  3231.  
  3232.     } else {
  3233.     wnd->wi_flags1 &= ~W_APERTA;
  3234.     Stat( CatCompArray[ ERR_NOWND ].cca_Str, TRUE, ERR_NOWND );
  3235.     }
  3236. }
  3237. ///
  3238.  
  3239.